Elixir 遍历枚举并提取值

Elixir 遍历枚举并提取值,elixir,Elixir,需要将上述枚举中的所有值提取到一个列表中这里有一种方法可以使用模式匹配、for和list进行此操作。keyfind/3: list_of_comboboxes=[ {"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]}, {"option", [{"value", "White"}, {"data", "White"}], ["White"]}, {"option", [{"value", "Red"},

需要将上述枚举中的所有值提取到一个列表中

这里有一种方法可以使用模式匹配、
for
list进行此操作。keyfind/3

list_of_comboboxes=[
{"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]}, 
{"option", [{"value", "White"}, {"data", "White"}], ["White"]},
{"option", [{"value", "Red"}, {"data", "Red"}], ["Red"]},
{"option", [{"value", "Black"}, {"data", "Black"}], ["Black"]}
]
iex(1)>组合框列表=[
…(1)>{“选项”、[{“值”、“”}、{“选定”、“选定”}、“选择颜色”]},
…(1)>{“选项”、[{“值”、“白”}、{“数据”、“白”}、“白”]}、,
…(1)>{“选项”、[{“值”、“红色”}、{“数据”、“红色”}、“红色”]},
…(1)>{“选项”、[{“值”、“黑”}、{“数据”、“黑”}、“黑”]}
...(1)> ]
iex(2)>对于{},list,{“value”,value}=list.keyfind(list,“value”,0),
…(2)>do:value
[“”、“白色”、“红色”、“黑色”]

即使
{“value”,value}
不是列表的第一项,这也会起作用。

这里有一种方法,使用模式匹配、
for
list.keyfind/3

list_of_comboboxes=[
{"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]}, 
{"option", [{"value", "White"}, {"data", "White"}], ["White"]},
{"option", [{"value", "Red"}, {"data", "Red"}], ["Red"]},
{"option", [{"value", "Black"}, {"data", "Black"}], ["Black"]}
]
iex(1)> list_of_comboboxes=[
...(1)>   {"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]},
...(1)>   {"option", [{"value", "White"}, {"data", "White"}], ["White"]},
...(1)>   {"option", [{"value", "Red"}, {"data", "Red"}], ["Red"]},
...(1)>   {"option", [{"value", "Black"}, {"data", "Black"}], ["Black"]}
...(1)> ]
iex(2)> for {_, list, _} <- list_of_comboboxes,
...(2)>     {"value", value} = List.keyfind(list, "value", 0),
...(2)>     do: value
["", "White", "Red", "Black"]
iex(1)>组合框列表=[
…(1)>{“选项”、[{value”、“”“}、{selected”、“selected”}、[“Select Color”]},
…(1)>{“选项”、[{“值”、“白”}、{“数据”、“白”}、“白”]}、,
…(1)>{“选项”、[{“值”、“红色”}、{“数据”、“红色”}、“红色”]},
…(1)>{“选项”、[{“值”、“黑”}、{“数据”、“黑”}、“黑”]}
...(1)> ]
iex(2)>对于{},list,{“value”,value}=list.keyfind(list,“value”,0),
…(2)>do:value
[“”、“白色”、“红色”、“黑色”]
即使
{“value”,value}
不是列表的第一项,这也会起作用。

只是出于好奇:

iex(1)> list_of_comboboxes=[
...(1)>   {"option", [{"value", ""}, {"selected", "selected"}], ["Select Color"]},
...(1)>   {"option", [{"value", "White"}, {"data", "White"}], ["White"]},
...(1)>   {"option", [{"value", "Red"}, {"data", "Red"}], ["Red"]},
...(1)>   {"option", [{"value", "Black"}, {"data", "Black"}], ["Black"]}
...(1)> ]
iex(2)> for {_, list, _} <- list_of_comboboxes,
...(2)>     {"value", value} = List.keyfind(list, "value", 0),
...(2)>     do: value
["", "White", "Red", "Black"]
组合框列表
|>映射(fn{“选项”,列表,{}->
map(list,fn{k,v}->{String.to_atom(k),v}end)[:value]
(完)
#⇒[”“,“白色”、“红色”、“黑色”]
只是出于好奇:

组合框列表
|>映射(fn{“选项”,列表,{}->
map(list,fn{k,v}->{String.to_atom(k),v}end)[:value]
(完)
#⇒[“”、“白色”、“红色”、“黑色”]
只是出于好奇#2:

defmdo模块
def extract({“option”,[{“value”,value}|},}),do:value
终止
枚举映射(组合框列表和M.extract/1)
#⇒[“”、“白色”、“红色”、“黑色”]
这看起来可能更糟,但实际上它提供了更多的灵活性:可以调整实现细节(
M.extract/1
),而保持集成代码(
Enum.map
)不变

这样代码就更模块化了。例如,可以使用@Dogbert在
M.extract/1
中提出的
List.keyfind/3
来实现更好的互操作性,而主代码保持原样。

只是出于好奇2:

defmdo模块
def extract({“option”,[{“value”,value}|},}),do:value
终止
枚举映射(组合框列表和M.extract/1)
#⇒[“”、“白色”、“红色”、“黑色”]
这看起来可能更糟,但实际上它提供了更多的灵活性:可以调整实现细节(
M.extract/1
),而保持集成代码(
Enum.map
)不变


这样代码就更模块化了。例如,可以使用@Dogbert在
M.extract/1
中提出的
List.keyfind/3
来实现更好的互操作性,而主代码保持原样。

在发布之前,最好先看看您尝试了什么。我需要提取值/数据属性,尝试了Enum.into和FaileEdit之后,如果您能在此处发布之前看到您所尝试的内容,那将非常高兴。我需要提取值/数据属性,尝试了Enum.into和Failed这是最好、最清晰的答案。如果您有关键字列表,则更容易获取值,但这种方式不依赖于顺序,而且效率很高,因为您在
上为
应用了guard子句。这是最好、最清晰的答案。如果您有关键字列表,则更容易获取值,但这种方式不依赖于顺序,而且效率很高,因为您在
上为
应用了guard子句。