["0724573977"]}, %{"Mary"=> ["0724573111", "0744556778"] }] 基本上是-6ren">
gpt4 book ai didi

Elixir 从 map 列表中获取信息

转载 作者:行者123 更新时间:2023-12-02 05:06:59 25 4
gpt4 key购买 nike

我通过邮件发送了以下结构:contacts = [%{"John"=> ["0724573977"]}, %{"Mary"=> ["0724573111", "0744556778"] }] 基本上是一个联系人列表,每个联系人都是一个 map name => Phone_numbers

我正在尝试制作一个包含所有电话号码的列表,忽略任何名称,仅列出号码:

a = [%{"1" => ["0724573977"]}, %{"2" => ["0724573111", "0744556778"]}]

p = Enum.reduce a, [], fn(contact, acc) ->
for {_record_id, phones} <- contact do
for phone <- phones do
acc ++ phone
end
end
end

IO.inspect p

这个产生:[[[["0724573977"] | “0724573111”],[[“0724573977”] | “0744556778”]]] 这很奇怪,但我不知道我做错了什么。

最佳答案

已经发布了许多正确答案,但我想我应该发布我首选的解决方案:使用 for与 3 <- :

iex(1)> contacts = [%{"1" => ["0724573977"]}, %{"2" => ["0724573111", "0744556778"]}]
[%{"1" => ["0724573977"]}, %{"2" => ["0724573111", "0744556778"]}]
iex(2)> for contact <- contacts, {_, phones} <- contact, phone <- phones, do: phone
["0724573977", "0724573111", "0744556778"]

(我特别不喜欢基于 List.flatten/1 的解决方案,因为如果最后一级数据是列表而不是字符串,它们将不会以相同的方式工作。该函数会展平任何深度的每个列表。这并不重要特殊情况,因为你的最后一层数据是字符串列表。)

关于Elixir 从 map 列表中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45317883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com