gpt4 book ai didi

list - 合并列表 erlang 的内部列表

转载 作者:行者123 更新时间:2023-12-01 09:41:37 24 4
gpt4 key购买 nike

我有一个列表L

L = [L1, L2, L3,...]. 

其中 L1、L2、L3.. 本身就是列表,如下所示:

L1 = [{k1, 10}, {k2, 20}, {k3, 30}, {k4, 20.9}, {k6, "Hello world"}]

L2 = [{k1, 90}, {k2, 210}, {k3, 60}, {k4, 66.9}, {k6, "Hello universe"}]

L3 = [...]

现在我想要一个结果组合列表:

FinalList = [
{k1, [10, 90, ...]}, % '...' denotes values from other lists
{k2, [20, 210, ...]},
{K3, [30, 60, ...]},
{k4, [20.9, 66.9, ...]},
{K6, ["Hello world", "Hello universe", ...]}
]

我可以使用我的 Old Posts Solutions:Combine/Merge Two Erlang lists 进行合并但我不确定如何将 L(列表的列表)传递给该合并函数。

提前致谢!

最佳答案

您可以使用 lists:foldlmerge 应用于列表列表。这是一个例子:

-module(test).
-export([test/0]).


merge(L1, L2) ->
merge_(lists:sort(L1), lists:sort(L2)).

merge_([{K, V1}|T1], [{K, V2}|T2]) when is_list(V1), is_list(V2)
-> [{K, V1 ++ V2}|merge_(T1, T2)];
merge_([{K, V1}|T1], [{K, V2}|T2]) when is_list(V1)
-> [{K, V1 ++ [V2]}|merge_(T1, T2)];
merge_([{K, V1}|T1], [{K, V2}|T2]) when is_list(V2)
-> [{K, [V1] ++ V2}|merge_(T1, T2)];
merge_([{K, V1}|T1], [{K, V2}|T2])
-> [{K, [V1, V2]}|merge_(T1, T2)];
merge_([{K1, V1}|T1], [{K2, _}|_]=L2) when K1 < K2
-> [{K1, [V1]}|merge_(T1, L2)];
merge_(L1, [{K2, V2}|T2]) when is_list(V2)
-> [{K2, V2}|merge_(L1, T2)];
merge_(L1, [{K2, V2}|T2])
-> [{K2, [V2]}|merge_(L1, T2)];
merge_(L1, []) -> [{K, V} || {K, V} <- L1].


test() ->

L1 = [{k1, 10}, {k2, 20}, {k3, 30}, {k4, 20.9}, {k6, "Hello world"}],
L2 = [{k1, 90}, {k2, 210}, {k3, 60}, {k4, 66.9}, {k6, "Hello universe"}],
L3 = [{k1, 45}, {k2, 35}, {k3, 37}, {k4, 77.9}, {k6, "Hello cosmo"}],
lists:foldl(fun merge/2, [], [L1, L2, L3]).

结果如下:

36> test:test().
[{k1,"-Z\n"},
{k2,[35,210,20]},
{k3,[37,60,30]},
{k4,[77.9,66.9,20.9]},
{k6,"Hello cosmoHello universeHello world"}]

如你所见,

  1. 您需要修改 merge 函数来处理列表(而不仅仅是原始问题中的原子)。它已经在我的示例代码中完成,它基于 Vychodil's answer .

  2. 您需要修改 merge 函数以正确处理字符串(作为键 k1 和 k6 中的证据)。您应该能够自己修复它。

最后但同样重要的是,当答案解决了您的问题时,您应该接受它。检查this link为什么。

关于list - 合并列表 erlang 的内部列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876507/

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