如何从长生不老药中的两个数组创建地图



嗨,我是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模块,但在实践中很少使用。

最新更新