首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Struct中选择一些值,并将其放到新的列表中

如何从Struct中选择一些值,并将其放到新的列表中
EN

Stack Overflow用户
提问于 2018-08-14 03:58:52
回答 1查看 517关注 0票数 0

我有这样的结构清单..。

代码语言:javascript
复制
[ %Phonebook{name: "Family", id: 3},  %Phonebook{name: "Friend", id: 2},
  %Phonebook{name: "Relatives", id: 1} ]

我想成为这样的人。

代码语言:javascript
复制
["Family": "3", "Friend": "2", "Relatives": "1"]

我怎么才能用药剂做这件事呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 04:18:03

首先,不可能在Keyword中使用字符串键。

在不失去一般性的情况下,我们可以假设你有地图,而不是结构。所以,给您一个Kernel.SpecialForms.for/1理解:

代码语言:javascript
复制
list = [
  %{name: "Family", id: 3},
  %{name: "Friend", id: 2},
  %{name: "Relatives", id: 1}
]

for %{name: name, id: id} <- list, do: {name, id}

请注意,你得到的正是你想要的。

代码语言:javascript
复制
#⇒ [{"Family", 3}, {"Friend", 2}, {"Relatives", 1}]

如果这些是原子,您将得到一个关键字,它的形式是您所期望的:

代码语言:javascript
复制
for %{name: name, id: id} <- list, do: {String.to_atom(name), id}
#⇒ [Family: 3, Friend: 2, Relatives: 1]

无论您想要返回一个map,请在上面的调用中使用into参数:

代码语言:javascript
复制
for %{name: name, id: id} <- list, do: {name, id}, into: %{}
#⇒ %{"Family" => 3, "Friend" => 2, "Relatives" => 1}

西德诺特:

代码语言:javascript
复制
[{:Family, 3}, {:Friend, 2}, {:Relatives, 1}] ==
  [Family: 3, Friend: 2, Relatives: 1]
#⇒ true

同样,使用Enum方法可以实现相同的功能,比如Enum.map/2

代码语言:javascript
复制
Enum.map(list, fn item -> {item.name, item.id} end)

或者是它的简短形式:

代码语言:javascript
复制
Enum.map(list, & {&1.name, &1.id})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51833506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档