Elixir 如何将嵌套列表(列表的列表)转换为一维扁平化列表
Elixir嵌套列表转一维列表的实现方法
针对你提出的一层嵌套列表拍平需求,可通过以下几种常用方案实现:
- 方法1:调用标准库内置的
List.flatten/1函数
这是最通用的解决方案,支持处理任意层级的嵌套列表,你的场景可直接调用:
nested_list = [[1, 2, 3], [4,5], [6,7,8], [9]] List.flatten(nested_list) # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
如果明确只有一层嵌套,也可以使用List.flatten/2限制拍平层级,性能会略优。
- 方法2:使用Enum模块的拼接函数
如果仅需要处理一层嵌套,直接调用Enum.concat/1即可,它本身就是用来将列表的列表拼接为一维列表的工具函数:
nested_list = [[1, 2, 3], [4,5], [6,7,8], [9]] Enum.concat(nested_list) # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
也可以用Enum.reduce/3手动实现拼接逻辑,适合需要自定义处理规则的场景:
nested_list = [[1, 2, 3], [4,5], [6,7,8], [9]] Enum.reduce(nested_list, [], fn sub_list, acc -> acc ++ sub_list end) # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
- 方法3:通过列表推导式实现
需要灵活添加过滤、转换逻辑时,可使用列表推导式遍历所有子元素:
nested_list = [[1, 2, 3], [4,5], [6,7,8], [9]] for sub_list <- nested_list, item <- sub_list, do: item # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
提示:如果嵌套列表存在超过1层的嵌套、或者包含非列表类型的元素,优先选择
List.flatten/1,另外两种方案仅适用于明确只有一层嵌套、所有子元素均为列表的场景。
内容的提问来源于stack exchange,提问作者DOKL57
相关产品推荐
相关产品推荐

