在嵌套列表中过滤或匹配

Filtering or matching in nested list

我的数据结构原来是一张大地图。但是我读到我们不应该使用太大的地图,以免 运行 出原子。所以我的新数据结构看起来像那样。

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

我想创建一个 filter_by/3 方法,通过 namecode

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

我应该将元组转换为地图还是有其他过滤方法?

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

在你的例子中:

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

请注意,即使您将在一个列表中使用数千个这样的地图,您也永远不会 运行 没有原子,因为 :name:code 永远是唯一的两个分配的原子(因为每个原子都是值,所以写 :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")