Elixir में मैप वह डेटा स्ट्रक्चर है जिसमें जानकारी की-वैल्यू जोड़ों के रूप में रखी जाती है। दूसरी भाषाओं में इन्हें associative arrays (PHP), hashes (Perl 5, Raku) या dictionaries (Python) जैसे नामों से भी जाना जाता है।
की और वैल्यू किसी भी डेटा टाइप की हो सकती हैं, लेकिन अगर की एक एटम है, तो हम संक्षिप्त रूप इस्तेमाल कर सकते हैं। मैप इस बात की गारंटी नहीं देते कि उनकी प्रविष्टियाँ पढ़ने या लौटाने पर किस क्रम में मिलेंगी।
खाली मैप को सिर्फ %{} से घोषित किया जाता है। अगर हमें मैप लिटरल में चीज़ें जोड़नी हैं, तो हम दो रूप इस्तेमाल कर सकते हैं:
# If the key is an atom:
%{atom_key: 1}
# If the key is a different type:
%{1 => :atom_value}
# You can even mix these if the atom form comes second:
%{"first_form" => :a, atom_form: :b}
हालाँकि कोई एक तय मानक रूप नहीं है, फिर भी की-वैल्यू लिटरल जोड़ों को लिखने का एक तरीका चुनिए और उसे हर जगह एक जैसा अपनाइए।
Elixir, Map मॉड्यूल में मैप के साथ काम करने के लिए कई फंक्शन देता है। Map मॉड्यूल के कुछ फंक्शन ऐसे हैं जिनमें मैप में बदलाव करने के लिए आपको एक अनाम फंक्शन देना होता है।
Elixir में हम मॉड्यूल एट्रिब्यूट बना सकते हैं, जिन्हें अपने फंक्शन में स्थिरांक की तरह इस्तेमाल किया जा सकता है।
defmodule Example do
# Defines the attribute as the value 1
@constant_number 1
def example_value() do
# Returns the value 1
@constant_number
end
end
मॉड्यूल स्थिरांक बनाने के लिए इस्तेमाल करने पर एट्रिब्यूट कोई भी एक्सप्रेशन हो सकता है, जिसका मूल्यांकन कंपाइल होते समय किया जा सके। कंपाइल होने के बाद मॉड्यूल एट्रिब्यूट उपलब्ध नहीं रहते, क्योंकि वे कंपाइल होते समय ही एक्सपैंड हो जाते हैं, ठीक वैसे ही जैसे C जैसी भाषाओं में परिभाषित मैक्रो।
इस अभ्यास में आप अपने इलाके के आर्केड हॉल के सबसे लोकप्रिय खेल के हाई स्कोर का हिसाब रखने का तरीका बनाएँगे।
नया हाई स्कोर मैप बनाने के लिए HighScore.new/0 फंक्शन बनाइए, जो कोई आर्गुमेंट नहीं लेता और हाई स्कोर का एक नया, खाली मैप लौटाता है।
HighScore.new()
# => %{}
हाई स्कोर मैप में कोई खिलाड़ी जोड़ने के लिए HighScore.add_player/3 बनाइए, जो एक ऐसा फंक्शन है जो 3 आर्गुमेंट लेता है:
डिफॉल्ट शुरुआती स्कोर को एक मॉड्यूल एट्रिब्यूट में रखिए। इसकी ज़रूरत आगे फिर पड़ेगी।
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas")
# => %{"Dave Thomas" => 0}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"Dave Thomas" => 0, "José Valim"=> 486_373}
हाई स्कोर मैप से किसी खिलाड़ी को हटाने के लिए HighScore.remove_player/2 बनाइए, जो 2 आर्गुमेंट लेता है:
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas")
# => %{"Dave Thomas" => 0}
score_map = HighScore.remove_player(score_map, "Dave Thomas")
# => %{}
किसी खिलाड़ी का स्कोर रीसेट करने के लिए HighScore.reset_score/2 बनाइए, जो 2 आर्गुमेंट लेता है:
अगर खिलाड़ी का कोई स्कोर न हो, तब भी यह फंक्शन काम करना चाहिए।
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"José Valim"=> 486_373}
score_map = HighScore.reset_score(score_map, "José Valim")
# => %{"José Valim"=> 0}
किसी खिलाड़ी के स्कोर को पिछले स्कोर में जोड़कर अपडेट करने के लिए HighScore.update_score/3 बनाइए, जो 3 आर्गुमेंट लेता है:
अगर खिलाड़ी का कोई पिछला स्कोर न हो, तब भी यह फंक्शन काम करना चाहिए। ऐसी स्थिति में मान लीजिए कि पिछला स्कोर 0 है।
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"José Valim"=> 486_373}
score_map = HighScore.update_score(score_map, "José Valim", 5)
# => %{"José Valim"=> 486_378}
खिलाड़ियों का ऐरे पाने के लिए HighScore.get_players/1 बनाइए, जो 1 आर्गुमेंट लेता है:
score_map = HighScore.new()
# => %{}
score_map = HighScore.add_player(score_map, "Dave Thomas", 2_374)
# => %{"Dave Thomas" => 2_374}
score_map = HighScore.add_player(score_map, "José Valim", 486_373)
# => %{"Dave Thomas" => 2_374, "José Valim"=> 486_373}
HighScore.get_players(score_map)
# => ["Dave Thomas", "José Valim"]
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।