एक सेट अद्वितीय वैल्यूओं का अपरिवर्तनीय और अक्रमित संग्रह है। एक सेट में सभी एलिमेंट एक ही टाइप के होने चाहिए।
gleam/set मॉड्यूल Set टाइप को परिभाषित करता है और सेट के साथ काम करने के लिए फंक्शन प्रदान करता है।
आप set.to_list और set.from_list की मदद से ऐरे और सेट को एक-दूसरे में बदल सकते हैं। सेट में एलिमेंट का क्रम निश्चित नहीं होता।
set.from_list([2, 3, 3, 3, 1, 1, 2])
// -> set.from_list([1, 2, 3])
set.to_list(set.from_list([2, 3, 3, 3, 1, 1, 2]))
// -> [1, 2, 3]
आप set.new, set.insert और set.delete की मदद से सेट बना सकते हैं और भर सकते हैं।
set.new()
// -> set.from_list([])
let eighty_eight = set.from_list([88])
set.insert(eighty_eight, 88)
// -> set.from_list([88])
set.insert(eighty_eight, 89)
// -> set.from_list([88, 89])
set.delete(eighty_eight, 89)
// -> set.from_list([88])
आप set.contains और set.size फंक्शन की मदद से सेट के कंटेंट की जाँच कर सकते हैं।
set.contains(eighty_eight, 88)
// -> True
set.size(eighty_eight)
// -> 1
सेट को set.union और set.intersection की मदद से जोड़ा जा सकता है।
let a = set.from_list([1, 5, 10])
let b = set.from_list([1, 2, 3, 4, 5])
set.union(a, b)
// -> set.from_list([1, 2, 3, 4, 5, 10])
set.intersection(a, b)
// -> set.from_list([1, 5])
आप सेट को फिल्टर कर सकते हैं।
let is_small = fn(n) { n <= 3 }
set.filter(b, is_small)
// -> set.from_list([1, 2, 3])
ब्लॉर्केमॉन™️ कार्डों का आपका पुराना शौक ज़रा भी कम नहीं हुआ है। आपने तो उन्हें फिर से जमा करना भी शुरू कर दिया है, और अब अपने दोस्तों को भी अपने साथ जोड़ रहे हैं।
इस अभ्यास में, कार्ड कलेक्शन को Set(String) से दर्शाया जाता है, क्योंकि जब आपका उद्देश्य मौजूद सारे कार्ड इकट्ठा करना हो, तो एक जैसे कार्ड मायने नहीं रखते।
आप चाहते हैं कि आपके दोस्त भी ब्लॉर्केमॉन™️ कार्ड जमा करने में लग जाएँ, और इसका सबसे अच्छा तरीका यह है कि आप उन्हें एक कार्ड देकर उनका कलेक्शन शुरू करा दें।
new_collection बनाइए, जो एक कार्ड को कलेक्शन में बदल देता है।
new_collection("Newthree")
// -> set.from_list(["Newthree"])
एक बार कलेक्शन बन जाने के बाद, उसे बढ़ते रहना ही होता है।
add_card बनाइए, जो एक कार्ड और एक कलेक्शन लेता है और दो वैल्यू वाला एक टपल लौटाता है: एक Bool, जो बताता है कि कार्ड पहले से कलेक्शन में था या नहीं, और वह कलेक्शन जिसमें कार्ड जोड़ दिया गया है।
add_card(set.from_list(["Newthree"]), "Scientuna")
// -> #(False, set.from_list(["Newthree", "Scientuna"]))
अब जब आपके दोस्त फिर से ब्लॉर्केमॉन™️ के शौकीन हो गए हैं, तो कार्डों की अदला-बदली करके आप अपना कलेक्शन भी बढ़ा सकते हैं।
हर अदला-बदली करने लायक नहीं होती, और कुछ तो हो ही नहीं सकतीं। आप ऐसा कार्ड नहीं दे सकते जो आपके पास ही न हो, और ऐसे कार्ड के लिए अदला-बदली नहीं करनी चाहिए जो आपके पास पहले से हो।
trade_card बनाइए, जो अदला-बदली के लिए दो कार्ड (आपका और उनका) और आपका मौजूदा कलेक्शन लेता है।
यह दो वैल्यू वाला एक टपल लौटाता है: एक Bool, जो बताता है कि अदला-बदली संभव है और करने लायक है या नहीं, और वह कलेक्शन जो अदला-बदली करने पर आपके पास होगा (भले ही अदला-बदली वाकई संभव न हो)।
trade_card("Scientuna", "Newthree", set.from_list(["Scientuna"]))
// -> #(True, set.from_list(["Newthree"]))
आप और आपके ब्लॉर्केमॉन™️ के शौकीन दोस्त इकट्ठा होते हैं और सोचते हैं कि सबसे आम कार्ड कौन-से हैं।
boring_cards बनाइए, जो कलेक्शनों का ऐरे लेता है और उन सारे कार्डों का क्रमबद्ध ऐरे लौटाता है जो हर कलेक्शन में मौजूद हैं।
boring_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> ["Scientuna"]
क्या आपके और आपके दोस्तों के पास मिलकर ब्लॉर्केमॉन™️ के सारे कार्ड हैं?
total_cards बनाइए, जो कलेक्शनों का ऐरे लेता है और सारे कलेक्शनों में मौजूद अलग-अलग कार्डों की कुल संख्या लौटाता है।
total_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> 2
आपका भतीजा जल्द ही आपसे मिलने आ रहा है, और आप उसे प्रभावित करना चाहते हैं। बच्चों को चमकदार चीज़ें पसंद होती हैं, है ना? ब्लॉर्केमॉन™️ कार्ड चमकदार हो सकते हैं!
shiny_cards बनाइए, जो एक कलेक्शन लेता है और उन सारे कार्डों वाला सेट लौटाता है जो "Shiny " से शुरू होते हैं।
shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
Exercism पर साइन अप कीजिए और Gleam को 33 कॉन्सेप्ट122 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।