【发布时间】:2019-08-26 12:36:08
【问题描述】:
我希望有效地转置 Elixir 中的(大)列表列表,其中每个子列表具有相同数量的标量元素。所以从这里:
iex(1)> x = [[1, 2], [3, 4], [5, 6]]
[[1, 2], [3, 4], [5, 6]]
我想解决这个问题:
[[1, 3, 5], [2, 4, 6]]
在 Python 中,我会使用“splat”运算符 * 和 zip:
In [1]: x = [[1, 2], [3, 4], [5, 6]]
In [2]: x
Out[2]: [[1, 2], [3, 4], [5, 6]]
In [3]: zip(*x)
Out[3]: [(1, 3, 5), (2, 4, 6)]
这完全等同于转置矩阵。
Elixir 中的等价物是什么?我需要对来自 CSV 的大量列表执行此操作。
奖励:地图类似,例如:
iex(1)> %{"a1" => %{"d1" => 1, "d2" => 2}, "a2" => %{"d1" => 3, "d2" => 4}, "a3" => %{"d1" => 5, "d2" => 6}}
%{
"a1" => %{"d1" => 1, "d2" => 2},
"a2" => %{"d1" => 3, "d2" => 4},
"a3" => %{"d1" => 5, "d2" => 6}
}
变成
%{
"d1" => %{"a1" => 1, "a2" => 3, "a3" => 5},
"d2" => %{"a1" => 2, "a2" => 4, "a3" => 6}
}
【问题讨论】: