在嵌套列表中过滤或匹配
Filtering or matching in nested list
我的数据结构原来是一张大地图。但是我读到我们不应该使用太大的地图,以免 运行 出原子。所以我的新数据结构看起来像那样。
countries = [[{'name', 'Germany'}, {'code', 'DE'}], [{'name', 'Austria'}, {'code', 'AT'}]]
我想创建一个 filter_by/3
方法,通过 name
或 code
属性过滤国家/地区列表的嵌套列表
我应该将元组转换为地图还是有其他过滤方法?
您可以使用地图列表。地图在检索元素时非常高效,尤其是当地图中的键很少时。
在你的例子中:
countries = [%{name: "Germany", code: "DE"},
%{name: "Austria", code: "AT"}]
请注意,即使您将在一个列表中使用数千个这样的地图,您也永远不会 运行 没有原子,因为 :name
和 :code
永远是唯一的两个分配的原子(因为每个原子都是值,所以写 :a
和 :a
就像写 3
和 3
)。
一旦你有了一个类似的列表,你就可以用像这样的函数来过滤它:
def filter_by(countries, key, value) do
Enum.filter(countries, fn(country) -> country[key] == value end)
end
filter_by(countries, :code, "AT")
我的数据结构原来是一张大地图。但是我读到我们不应该使用太大的地图,以免 运行 出原子。所以我的新数据结构看起来像那样。
countries = [[{'name', 'Germany'}, {'code', 'DE'}], [{'name', 'Austria'}, {'code', 'AT'}]]
我想创建一个 filter_by/3
方法,通过 name
或 code
我应该将元组转换为地图还是有其他过滤方法?
您可以使用地图列表。地图在检索元素时非常高效,尤其是当地图中的键很少时。
在你的例子中:
countries = [%{name: "Germany", code: "DE"},
%{name: "Austria", code: "AT"}]
请注意,即使您将在一个列表中使用数千个这样的地图,您也永远不会 运行 没有原子,因为 :name
和 :code
永远是唯一的两个分配的原子(因为每个原子都是值,所以写 :a
和 :a
就像写 3
和 3
)。
一旦你有了一个类似的列表,你就可以用像这样的函数来过滤它:
def filter_by(countries, key, value) do
Enum.filter(countries, fn(country) -> country[key] == value end)
end
filter_by(countries, :code, "AT")