Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 我如何创建嵌套的组_by?_Elixir - Fatal编程技术网

Elixir 我如何创建嵌套的组_by?

Elixir 我如何创建嵌套的组_by?,elixir,Elixir,基本上,我尝试获取数据并使用Enum.group_by创建字典,但我希望继续按子类别对相同的数据进行分组 数据=[ %{公司:一号公司,州:洛杉矶,规模:100}, %{公司:一号公司,州:洛杉矶,规模:200}, %{公司:第二公司,州:德克萨斯州,规模:200}, %{公司:第二公司,州:洛杉矶,规模:300}, %{公司:三公司,州:洛杉矶,规模:400}, %{公司:四公司,州:德克萨斯州,规模:500} ] 我想先按公司分组,然后在地图组中按州分组,再在嵌套地图组中按大小分组。本质上是

基本上,我尝试获取数据并使用Enum.group_by创建字典,但我希望继续按子类别对相同的数据进行分组

数据=[ %{公司:一号公司,州:洛杉矶,规模:100}, %{公司:一号公司,州:洛杉矶,规模:200}, %{公司:第二公司,州:德克萨斯州,规模:200}, %{公司:第二公司,州:洛杉矶,规模:300}, %{公司:三公司,州:洛杉矶,规模:400}, %{公司:四公司,州:德克萨斯州,规模:500} ] 我想先按公司分组,然后在地图组中按州分组,再在嵌套地图组中按大小分组。本质上是一个包含两个嵌套映射和一个对应数据数组的映射

%{公司一=>%{ LA=>%{ 100 => [ %{公司:一号公司,州:洛杉矶,规模:100} ], 200 => [ %{公司:一号公司,州:洛杉矶,规模:200} ] } } } 我的尝试看起来像这样

列表= 数据 |>Enum.group_byfn x->x.company end keys=Map.keysdata 更新的_列表= 对于键Enum.group_byfn x->x.state end 终止
我使用了Enum.group_by/1作为初始格式,但之后尝试的任何操作都会将数据结构搞砸。任何帮助都会很好。谢谢。

它不太漂亮,但你可以这样做:

Enum.group_bydata和&1.company |>Map.newfn{k,v}-> {k, Enum.group_byv和&1.state |>Map.newfn{k,v}->{k,Enum.group_byv,&&1.size}end} 终止 结果:

%{ 公司四=>%{ TX=>%{500=>[%{company:company_-four,size:500,state:TX}]} }, 公司一=>%{ LA=>%{ 100=>[%{公司:公司,规模:100,州:洛杉矶], 200=>[%{公司:一家公司,规模:200,州:洛杉矶] } }, 公司三=>%{ LA=>%{400=>[%{company:company_-three,size:400,state:LA}]} }, 公司二=>%{ LA=>%{300=>[%{company:company_-two,size:300,state:LA}]}, TX=>%{200=>[%{company:company_two,size:200,state:TX}]} } }
这不是很漂亮,但你可以这样做:

Enum.group_bydata和&1.company |>Map.newfn{k,v}-> {k, Enum.group_byv和&1.state |>Map.newfn{k,v}->{k,Enum.group_byv,&&1.size}end} 终止 结果:

%{ 公司四=>%{ TX=>%{500=>[%{company:company_-four,size:500,state:TX}]} }, 公司一=>%{ LA=>%{ 100=>[%{公司:公司,规模:100,州:洛杉矶], 200=>[%{公司:一家公司,规模:200,州:洛杉矶] } }, 公司三=>%{ LA=>%{400=>[%{company:company_-three,size:400,state:LA}]} }, 公司二=>%{ LA=>%{300=>[%{company:company_-two,size:300,state:LA}]}, TX=>%{200=>[%{company:company_two,size:200,state:TX}]} } }
我发现这个问题很有意思,最后用了一种通用的方法——只需传递你的结构和你想要分组的键

defmodule NESTEGROUP do 解除访问密钥[key],do:[access.keykey,[] defp access|u keys[key | rest],do:[access.keykey,%{}| access|u keysrest] def嵌套的_组数据,键do 数据 |>枚举减少%{},fn elt,acc-> 钥匙= Enum.mapkeys、&Map.getelt、&1 |>访问密钥 更新INAC,钥匙,fn列表->[elt |列表]结束 终止 终止 终止 我们需要access_key helper来确保最后一个键是列表,而不是地图

iex2>NestedGroup.nested_groupdata,[:公司,:州,:大小] %{ 公司四=>%{ TX=>%{500=>[%{company:company_-four,size:500,state:TX}]} }, 公司一=>%{ LA=>%{ 100=>[%{公司:公司,规模:100,州:洛杉矶], 200=>[%{公司:一家公司,规模:200,州:洛杉矶] } }, 公司三=>%{ LA=>%{400=>[%{company:company_-three,size:400,state:LA}]} }, 公司二=>%{ LA=>%{300=>[%{company:company_-two,size:300,state:LA}]}, TX=>%{200=>[%{company:company_two,size:200,state:TX}]} } }
我发现这个问题很有意思,最后用了一种通用的方法——只需传递你的结构和你想要分组的键

defmodule NESTEGROUP do 解除访问密钥[key],do:[access.keykey,[] defp access|u keys[key | rest],do:[access.keykey,%{}| access|u keysrest] def嵌套的_组数据,键do 数据 |>枚举减少%{},fn elt,acc-> 钥匙= Enum.mapkeys、&Map.getelt、&1 |>访问密钥 更新INAC,钥匙,fn列表->[elt |列表]结束 终止 终止 终止 我们需要access_key helper来确保最后一个键是列表,而不是地图

iex2>NestedGroup.nested_groupdata,[:公司,:州,:大小] %{ 公司四=>%{ TX=>%{500=>[%{company:company_-four,size:500,state:TX}]} }, 公司一=>%{ LA=>%{ 100=>[%{公司:公司,规模:100,州:洛杉矶], 200=>[%{公司:一家公司,规模:200,州:洛杉矶] } }, 公司三=>%{ LA=>%{400=>[%{公司:第三公司, 大小:400,状态:LA}]} }, 公司二=>%{ LA=>%{300=>[%{company:company_-two,size:300,state:LA}]}, TX=>%{200=>[%{company:company_two,size:200,state:TX}]} } }
美好的适用于任意数量的键太好了。也可以使用任意数量的键