gpt4 book ai didi

Elixir - 合并 2 个列表列表(如列)

转载 作者:行者123 更新时间:2023-12-04 11:29:36 27 4
gpt4 key购买 nike

如何在 Elixir 中使用 Enum 函数将两个数组合并在一起?

例如

  points  = [[1.0, 2.0],
[5.0, 3.0],
[2.0, 4.0],
[3.0, 1.0],
[2.0, 2.0],
[4.0, 3.0],
[1.0, 2.0],
[2.0, 5.0],
[14.0, 13.0],
[11.0, 12.0],
[12.0, 15.0],
[32.0, 25.0]]

results = [1.0,
3.0,
2.0,
1.0,
3.0,
2.0,
1.0,
3.0,
2.0,
1.0,
3.0,
2.0]

组合数组(添加的列)应如下所示:

    combined =  [[1.0, 2.0, 1.0],
[5.0, 3.0, 3.0],
[2.0, 4.0, 2.0],
[3.0, 1.0, 1.0],
[2.0, 2.0, 3.0],
[4.0, 3.0, 2.0],
[1.0, 2.0, 1.0],
[2.0, 5.0, 3.0],
[14.0, 13.0, 2.0],
[11.0, 12.0, 1.0],
[12.0, 15.0, 3.0],
[32.0, 25.0, 2.0]]

看起来像这样的东西应该工作:

points
|> Stream.with_index
|> Enum.map(fn({x,i}) -> Enum.into(x, Enum.fetch!(results, i)) end)

虽然,这会产生一个错误:

** (Protocol.UndefinedError) protocol Collectable not implemented for 1.0. This protocol is implemented for: BitString, Ecto.Adapters.SQL.Stream, File.Stream, HashDict, HashSet, IO.Stream, List, Map, MapSet, Plug.Conn, Postgrex.Stream
(elixir) lib/collectable.ex:1: Collectable.impl_for!/1
(elixir) lib/collectable.ex:77: Collectable.into/1
(elixir) lib/enum.ex:1158: Enum.into_protocol/2
(elixir) lib/enum.ex:1259: anonymous fn/3 in Enum.map/2
(elixir) lib/enum.ex:1824: anonymous fn/3 in Enum.map/2
(elixir) lib/stream.ex:1413: anonymous fn/3 in Enumerable.Stream.reduce/3
(elixir) lib/stream.ex:978: anonymous fn/3 in Stream.with_index/2
(elixir) lib/enum.ex:3161: Enumerable.List.reduce/3
(elixir) lib/stream.ex:1433: Enumerable.Stream.do_each/4
(elixir) lib/enum.ex:1823: Enum.map/2

最佳答案

每当您想同时迭代两个可枚举对象时,您应该考虑使用 Enum.zip/2。这就是我使用 Enum.zip/2for 的方式:

for {point, result} <- Enum.zip(points, results) do
point ++ [result]
end
|> IO.inspect

输出:

[[1.0, 2.0, 1.0], [5.0, 3.0, 3.0], [2.0, 4.0, 2.0], [3.0, 1.0, 1.0],
[2.0, 2.0, 3.0], [4.0, 3.0, 2.0], [1.0, 2.0, 1.0], [2.0, 5.0, 3.0],
[14.0, 13.0, 2.0], [11.0, 12.0, 1.0], [12.0, 15.0, 3.0], [32.0, 25.0, 2.0]]

回复:为什么您的代码不起作用:Enum.into 的第二个参数应该是可枚举的。你可能想把它包装在一个列表中:

Enum.into(x, [Enum.fetch!(results, i)])

不过,我建议使用 Enum.zip/2 解决方案。

关于Elixir - 合并 2 个列表列表(如列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46818853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com