当前位置:  开发笔记 > 编程语言 > 正文

使用Elixir在地图列表中获取特定键值?

如何解决《使用Elixir在地图列表中获取特定键值?》经验,为你挑选了2个好方法。

作为Elixir的新手,我在理解模式匹配方面遇到了一些问题.

如果我有这样的Elixir数据结构:

list_with_maps = [%{"id" => 1, "name" => "a"}, %{"id" => 2, "name" => "b"}]

从中获取所有id字段的值的最佳方法是什么?



1> Gazler..:

您可以映射列表并使用Enum.map/2返回id

Enum.map(list_with_maps, fn (x) -> x["id"] end)
[1, 2]

您可以使用捕获运算符编写相同的函数:

Enum.map(list_with_maps, & &1["id"])

我更喜欢写作& &1["id"],&(&1["id"])但括号是可选的.



2> Zamith..:

获取a键的子集的一种更通用(更简单)的方法Map是use Map.take/2,您可以像这样使用:

map = %{"id" => 1, "name" => "a"}
Map.take(map, ["id"])
> %{"id" => 1}

如您所见,它需要一个键数组,并仅包含所需键返回一个新映射。

现在,将其应用于列表就像使用地图,然后使用Map.take/2in mapper函数一样简单。如前所述,您可以使用lambda来执行此操作:

Enum.map(list_with_maps, fn (map) -> Map.take(map, ["id"]) end)

或者您可以使用捕获:

Enum.map(list_with_maps, &(Map.take(&1, ["id"])))

这将创建更多的中间映射,但是对于大多数情况而言,这不会成为问题,因为Elixir在内存重用方面非常聪明,并且实际上不会多次创建这些对象。

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有