我的数据结构原来是一张大地图。但我读到我们不应该使用太大的地图,以免耗尽原子。所以我的新数据结构就是这样。
countries = [[{'name', 'Germany'}, {'code', 'DE'}], [{'name', 'Austria'}, {'code', 'AT'}]]
我想制作filter_by/3
方法,按属性name
或code
我应该将元组转换为地图还是有另一种方法来过滤它?
答案 0 :(得分:4)
您可以使用地图列表。在检索元素时,地图非常有效,特别是当地图中的键很少时。
在你的例子中:
countries = [%{name: "Germany", code: "DE"},
%{name: "Austria", code: "AT"}]
请注意,即使您在列表中使用了数千个此类地图,您也永远不会耗尽原子,因为:name
和:code
将始终是唯一的两个分配原子(因为每个atom恰好是值,所以写: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")