Elixir中如何去除嵌套列表的多余方括号?
解决Elixir列表多余嵌套方括号的递归实现
你可以通过递归遍历并展开单元素嵌套列表的方式实现需求,同时保留关键字对的结构。以下是具体的代码实现:
defmodule NestedFlattener do def flatten_single_nested(item) when is_list(item) do case item do # 展开单元素列表,递归处理内部元素 [inner] -> flatten_single_nested(inner) # 多元素列表则逐个处理每个元素 _ -> Enum.map(item, &flatten_single_nested/1) end end # 处理关键字对(二元元组),递归展开值部分 def flatten_single_nested({key, value}) do {key, flatten_single_nested(value)} end # 非列表/非二元元组的元素直接返回 def flatten_single_nested(item), do: item end
使用示例
input = [ :juridical_person_document, [re_developments: [[properties: [[re_development: [:re_developer]]]]]], :legal_address ] output = NestedFlattener.flatten_single_nested(input) # 输出结果: # [ :juridical_person_document, re_developments: [properties: [re_development: [:re_developer]]], :legal_address ]
逻辑说明
- 列表处理:如果当前列表只有一个元素,就递归展开这个元素(去除一层方括号);如果是多元素列表,则遍历每个元素分别处理后重组。
- 关键字对处理:针对Elixir的关键字结构(二元元组),保持键不变,仅递归处理值部分,确保值里的嵌套方括号也被清理。
- 基础元素处理:原子、数字等非嵌套结构直接返回,不做修改。
内容的提问来源于stack exchange,提问作者Sky Canvas
相关产品推荐
相关产品推荐

