我有一个这样的清单清单:

[
    ["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538077790705827"],
     ["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","1538078530667847"],
     ["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","1538077778390908"],
     ["5b71d7e458c37fa04a7ce768","5bad45b1e990057961313822","1538082492283531"]
]

我想将其转换为类似的列表:

[ 
  {"5b3f77502dfe0deeb8912b42",
   [{"5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42", "1538077790705827"},
    {"5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42", "1538078530667847"},
    {"5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42" ,"1538077778390908"}
   ]},

{"5bad45b1e990057961313822",
   [{"5b71d7e458c37fa04a7ce768","5bad45b1e990057961313822","1538082492283531"}
   ]}
]

因此,键将在原始列表的第二项之外创建元组

[“ 5b71d7e458c37fa04a7ce768”, “ 5b3f77502dfe0deeb8912b42” ,“ 1538077790705827”],

#1楼 票数:4

首先,使用Enum.group_by列表的第二个元素。 然后,将结果映射值的每个值映射到List.to_tuple Enum.map与地图Enum.map使用时会自动将每个键/值对转换为元组。

list = [
  ["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538077790705827"],
  ["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538078530667847"],
  ["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538077778390908"],
  ["5b71d7e458c37fa04a7ce768", "5bad45b1e990057961313822", "1538082492283531"]
]

list
|> Enum.group_by(&Enum.at(&1, 1))
|> Enum.map(fn {k, v} -> {k, Enum.map(v, &List.to_tuple/1)} end)
|> IO.inspect

输出:

[
  {"5b3f77502dfe0deeb8912b42",
   [
     {"5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42",
      "1538077790705827"},
     {"5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42",
      "1538078530667847"},
     {"5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42",
      "1538077778390908"}
   ]},
  {"5bad45b1e990057961313822",
   [
     {"5b71d7e458c37fa04a7ce768", "5bad45b1e990057961313822",
      "1538082492283531"}
   ]}
]

#2楼 票数:0

我将使用地图根据第二个元素对列表列表进行索引,然后使用Enum.map/2List.to_tuple/1对其进行转换。

如果

l = [
    ["5b71d7e458c37fa04a7ce768", "5b3f77502dfe0deeb8912b42", "1538077790705827"],
     ["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","1538078530667847"],
     ["5b71d7e458c37fa04a7ce768","5b3f77502dfe0deeb8912b42","1538077778390908"],
     ["5b71d7e458c37fa04a7ce768","5bad45b1e990057961313822","1538082492283531"]
]

然后

l
    |> Enum.reduce(%{}, fn [a,b,c], acc -> put_in(acc[b], (acc[b] && acc[b] || []) ++ [[a,b,c]]) end)
    |> Enum.map(fn {a,b} -> {a, Enum.map(b, &List.to_tuple/1)} end)

做工作。

  ask by user1000622 translate from so

未解决问题?本站智能推荐:

1回复

Elixir将元组列表转换为Map[重复]

这个问题在这里已经有了答案: 如何从 Elixir 中的两个项元组列表创建映射(3 个回答) 3 个月前关闭。 我有一个请求标头的元组列表,例如 我试图将
2回复

将嵌套元组转换为elixir中的列表

试图做: 期待得到: 我的问题是,最好的方法是什么?
1回复

使用简写符号匿名函数将元组转换为列表

通过戴夫的(PragProg)Elixir书。 挑战是将一对元组转换为列表。 这有效 现在我尝试使用速记符号(我觉得有些东西丢失但不知道它是什么......例如我怎么说我期待/发送一个元组) 如何使用简写表示法获得相同的结果? 试过这个
6回复

列表与元组-使用什么以及何时使用?

我试图掌握Elixir Lists和Tuples之间的区别。 从 Elixir Guides 的Basic Types部分,我了解到: 列表存储为链接项目 更新列表很快(仅在前置时) 获取列表项很慢 获取列表信息(大小/长度)很慢 元组元素存储在一起 获取元组信息很快 获取元组元素很快 修改元组
1回复

Elixir:将列表列表转换为一个列表

假设我们有以下列表: 如何将其转换为包含其对应位置上每个元素总和的列表,以便最终结果为[5, 10, 15, 20] ?
1回复

如何将结构转换为地图列表

我有这个结构(数据来自数据库): 我需要将其转换为地图/关键字列表的列表(像这样): 这将被转换并传递到一个render函数中,在这里我可以使用@links来访问Struct:
1回复

如何将字符串列表转换为整数列表?

我试图请求一个数字列表(例如:“1 2 3 4 5 6”)并输出一个整数列表(例如:“[1,2,3,4,5,7]”)。 我想出了以下代码: 这将无法编译并给我以下错误: 我通过iex一次一行地运行这个代码,使用每个函数的结果作为下一个的输入并实现正确格式化的列表但是当我把它们放在一个文
5回复

在Elixir中,如何将范围转换为列表?

我可以声明一个范围如下: 有没有办法将范围转换为列表?