【问题标题】:Building Options for Select from Elixir Map从 Elixir 地图中选择的构建选项
【发布时间】:2017-04-10 16:25:29
【问题描述】:

假设这个数据集,

 %{"ACTION" => "avail.datacenters",
"DATA" => [%{"ABBR" => "dallas", "DATACENTERID" => 2,
  "LOCATION" => "Dallas, TX, USA"},
%{"ABBR" => "fremont", "DATACENTERID" => 3,
  "LOCATION" => "Fremont, CA, USA"},
%{"ABBR" => "atlanta", "DATACENTERID" => 4,
  "LOCATION" => "Atlanta, GA, USA"},
%{"ABBR" => "newark", "DATACENTERID" => 6, "LOCATION" => "Newark, NJ, USA"},
%{"ABBR" => "london", "DATACENTERID" => 7,
  "LOCATION" => "London, England, UK"},
%{"ABBR" => "tokyo", "DATACENTERID" => 8, "LOCATION" => "Tokyo, JP"},
%{"ABBR" => "singapore", "DATACENTERID" => 9,
  "LOCATION" => "Singapore, SG"},
%{"ABBR" => "frankfurt", "DATACENTERID" => 10,
  "LOCATION" => "Frankfurt, DE"},
%{"ABBR" => "shinagawa1", "DATACENTERID" => 11,
  "LOCATION" => "Tokyo 2, JP"}], "ERRORARRAY" => []}}

在 Ruby 中,我可以做到

formatted_array_of_hashes = data_set.each.map{ |h| { h["LOCATION"] => h["DATACENTERID"] }}

然后

merged_hash = Hash[*formatted_array_of_hashes.map(&:to_a).flatten]

...我将在选择标签中使用位置、数据中心 ID。

请问我如何在 Elixir 中实现类似的功能?

任何指向正确方向的指针都将受到高度赞赏

【问题讨论】:

  • 像这样:for %{"LOCATION" => k, "DATACENTERID" => v} <- data_set, into: %{}, do: {k, v}?

标签: elixir phoenix-framework


【解决方案1】:

你可以使用for,在do中返回一个2元组,然后放到into: %{}

map = for %{"LOCATION" => k, "DATACENTERID" => v} <- data_set, into: %{}, do: {k, v}

如果您想将其与Phoenix.HTML.Form.select/4 一起使用,则无需构建地图。您可以传递元组列表。这样您就不会像使用地图一样丢失元素的顺序,因为地图是无序的。

select _, _, for(%{"LOCATION" => k, "DATACENTERID" => v} <- data_set, do: {k, v})

旁注:您的 Ruby 代码也可以简化为:

hash = data_set.map { |h| [h["LOCATION"], h["DATACENTERID"]] }.to_h

【讨论】:

  • 哇!,非常感谢您简化我的 Ruby 代码。不知何故,示例代码返回了一个空地图。与 select 一起使用时,我得到一个 Protocol.UndefinedError,protocol Enumerable not implemented
  • 啊,你的名单在data_set["DATA"]吗?然后将&lt;- data_set 更改为&lt;- data_set["DATA"]。如果模式不匹配,for 会默默地忽略该值。
  • 非常感谢!
猜你喜欢
  • 2020-07-14
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
相关资源
最近更新 更多