首页 > 解决方案 > 根据值在两个地图之间进行选择

问题描述

我有这个数据集:

%{
  "away" => %{
    "id" => "575ec304-wlk3-239n-3032jdns3944",
    "points" => 115
  },
  "home" => %{
    "id" => "583ec7cd-fb46-11e1-82cb-f4ce4684ea4c",
    "points" => 120
  }
}

我想返回点数最多的地图,这样我就得到了这个。

%{
  "home" => %{
    "id" => "583ec7cd-fb46-11e1-82cb-f4ce4684ea4c",
    "points" => 120
  }
}

我在想这enum.find会起作用,但我没有任何运气。任何帮助都会很棒。

标签: elixirphoenix-framework

解决方案


您想要使用Enum.max_by/4它是因为您不需要正在搜索的项目的特定属性,而是希望项目本身具有最多的点。

iex> data = %{
  "away" => %{
    "id" => "575ec304-wlk3-239n-3032jdns3944",
    "points" => 115
  },
  "home" => %{
    "id" => "583ec7cd-fb46-11e1-82cb-f4ce4684ea4c",
    "points" => 120
  }
}
iex> Enum.max_by(data, fn {_, value} -> value["points"] end)
{"home", %{"id" => "583ec7cd-fb46-11e1-82cb-f4ce4684ea4c", "points" => 120}}

推荐阅读