在嵌套列表中过滤或匹配

时间:2015-01-31 15:39:59

标签: list nested maps elixir

我的数据结构原来是一张大地图。但我读到我们不应该使用太大的地图,以免耗尽原子。所以我的新数据结构就是这样。

countries = [[{'name', 'Germany'}, {'code', 'DE'}], [{'name', 'Austria'}, {'code', 'AT'}]]

我想制作filter_by/3方法,按属性namecode

过滤国家/地区列表的嵌套列表

我应该将元组转换为地图还是有另一种方法来过滤它?

1 个答案:

答案 0 :(得分:4)

您可以使用地图列表。在检索元素时,地图非常有效,特别是当地图中的键很少时。

在你的例子中:

countries = [%{name: "Germany", code: "DE"},
  %{name: "Austria", code: "AT"}]

请注意,即使您在列表中使用了数千个此类地图,您也永远不会耗尽原子,因为:name:code将始终是唯一的两个分配原子(因为每个atom恰好是值,所以写:a:a就像写33)。

一旦你有一个类似的列表,你可以用以下函数过滤它:

def filter_by(countries, key, value) do
  Enum.filter(countries, fn(country) -> country[key] == value end)
end

filter_by(countries, :code, "AT")