如何从长生不老药中的两个数组创建地图?
How do I create a map from two arrays in elixir?
嗨,我是 Elixir 的新手
而且我无法根据下面解释的两个列表创建地图
我有两个列表,想将数据转换为地图,如下所示
rows_array = ['R1', 'R2', 'R3', 'R4' ]
data_arrays = [
[c1, v11, v12, v13, v14],
[c2, v21, v22, v23, v24],
[c3, v31, v32, v33, v34],
[c4, v41, v42, v43, v44],
[c5, v51, v52, v53, v54]
]
我想创建如下所示的地图
%{
"R1": %{c1: v11, c2: v21, c3: v31, c4: v41, c5: c51},
"R2": %{c1: v12, c2: v22, c3: v32, c4: v42, c5: c52},
"R3": %{c1: v13, c2: v23, c3: v33, c4: v43, c5: c53},
"R4": %{c1: v14, c2: v24, c3: v34, c4: v44, c5: c54},
}
谢谢
以下应该有效。
请注意 Enum.zip_with/3 自 1.12 以来是新的,但您可以使用 Enum.zip
然后 Enum.map
.
完成相同的操作
empty_rows = Enum.map(rows_array, fn _ -> %{} end)
rows =
Enum.reduce(data_arrays, empty_rows, fn [column_name | values], rows_acc ->
Enum.zip_with(values, rows_acc, fn value, row ->
Map.put(row, column_name, value)
end)
end)
result = Enum.zip(rows_array, rows) |> Map.new()
另外,我保留了你的变量名,但请注意,这些都是链表而不是数组。 Erlang 附带了一个 :array
模块,但在实践中很少使用。
嗨,我是 Elixir 的新手
而且我无法根据下面解释的两个列表创建地图
我有两个列表,想将数据转换为地图,如下所示
rows_array = ['R1', 'R2', 'R3', 'R4' ]
data_arrays = [
[c1, v11, v12, v13, v14],
[c2, v21, v22, v23, v24],
[c3, v31, v32, v33, v34],
[c4, v41, v42, v43, v44],
[c5, v51, v52, v53, v54]
]
我想创建如下所示的地图
%{
"R1": %{c1: v11, c2: v21, c3: v31, c4: v41, c5: c51},
"R2": %{c1: v12, c2: v22, c3: v32, c4: v42, c5: c52},
"R3": %{c1: v13, c2: v23, c3: v33, c4: v43, c5: c53},
"R4": %{c1: v14, c2: v24, c3: v34, c4: v44, c5: c54},
}
谢谢
以下应该有效。
请注意 Enum.zip_with/3 自 1.12 以来是新的,但您可以使用 Enum.zip
然后 Enum.map
.
empty_rows = Enum.map(rows_array, fn _ -> %{} end)
rows =
Enum.reduce(data_arrays, empty_rows, fn [column_name | values], rows_acc ->
Enum.zip_with(values, rows_acc, fn value, row ->
Map.put(row, column_name, value)
end)
end)
result = Enum.zip(rows_array, rows) |> Map.new()
另外,我保留了你的变量名,但请注意,这些都是链表而不是数组。 Erlang 附带了一个 :array
模块,但在实践中很少使用。