अमृत उनके मूल्यों पर आधारित सूची के कुछ आइटमों को फ़िल्टर करने की कोशिश कर के लिए मिलान पैटर्न में निर्माण किया है नहीं है।
तुम इतनी तरह अलग-अलग आइटम की जाँच करने के एक पैटर्न मैच लिख सकते हैं:
match_country_code = fn (%{:code => "DE"} = country) -> country
(_) -> nil
end
और फिर Enum.find है कि पारित:
lands = [
%{name: "Deutschland", code: "DE"},
%{name: "Frankreich", code: "FR"}
]
Enum.find(lands, &(match_country_code.(&1)))
# => %{code: "DE", name: "Deutschland"}
या सामान्यीकरण करने के लिए आप:
lands = [
%{name: "Deutschland", code: "DE"},
%{name: "Frankreich", code: "FR"}
]
find_by = fn (list, key, val) ->
Enum.find(list, &(Map.get(&1, key)==val))
end
find_by.(lands, :name, "DE")
#=> %{code: "DE", name: "Deutschland"}
फ़िल्टर करने के लिए खोजें और परिणामों की एक सूची प्राप्त करें:
lands = [
%{name: "Deutschland", code: "DE"},
%{name: "Germany", code: "DE"},
%{name: "Frankreich", code: "FR"}
]
filter_by = fn (list, key, val) ->
Enum.filter(list, &(Map.get(&1, key)==val))
end
filter_by.(lands, :code, "DE")
#=> [%{code: "DE", name: "Deutschland"}, %{code: "DE", name: "Germany"}]
यह एक अच्छा जवाब है, यह भी पता नहीं था कि दूसरा फॉर्म संभव था! – greggreg
ग्रेट उत्तर, एक छोटा सा अतिरिक्त जो चेतावनी से छुटकारा पायेगा। दूसरे फ़ंक्शन क्लॉज में 't' चर का उपयोग नहीं किया जाता है और इसलिए इसे' _t' के रूप में निर्दिष्ट किया जाना चाहिए। – b73
@ बी 73 अच्छा पकड़ो! मैंने लिखा कि मोबाइल पर मैंने इसे भी नहीं चलाया, ओह :) धन्यवाद! – whatyouhide