Erlang Lists:展平嵌套列表

Posted

技术标签:

【中文标题】Erlang Lists:展平嵌套列表【英文标题】:Erlang Lists: Flatten a nested list 【发布时间】:2020-10-11 13:25:26 【问题描述】:

给定的 erlang 列表是 L = [[ [], [1,3], [4,5] ]]. 预期输出为[[1,3], [4,5]]

我尝试使用lists:flatten/1,但它会将扁平列表返回为[1,3,4,5]

【问题讨论】:

您的描述不完整。您应该写下您的确切目标:输入类型(列表中有多少嵌套级别,成员类型......),要执行的操作和输出类型。如果你做得好,80%的工作就完成了。 【参考方案1】:

这个问题是模棱两可的,因为它并没有真正告诉我们需要如何进行扁平化。仅从您的输入/输出示例来看,您似乎只想展平一个级别并忽略空列表。这可以通过以下方式实现:

1> lists:filter(fun (X) -> X /= [] end, lists:append([[ [], [1,3], [4,5] ]])).
[[1,3],[4,5]]

但人们也可以想象其他符合这些标准的扁平化。希望这能让你开始!

【讨论】:

【参考方案2】:

不,flatten 函数返回一个包含非列表元素的列表,它消除了输入列表中的所有列表。 如果您使用了有效的算法,则不需要展平任何列表,因此创建列表的最佳方法是在列表的头部添加元素,并尽量不要使用 ++-- 运算符。

【讨论】:

以上是关于Erlang Lists:展平嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

Erlang:展平字符串列表

erlang下lists模块sort(排序)方法源码解析

[Erlang开发之路]、lists模块扫盲

Erlang:用新功能“扩展”现有模块

列表:在Erlang中带有副作用的地图

加速 Erlang 索引功能