ट्रैक
/
Go
Go
/
अभ्यास
/
ग्रॉस स्टोर
ग्रॉस स्टोर

ग्रॉस स्टोर

सीखने का अभ्यास

परिचय

Go में map एक बिल्ट-इन डेटा टाइप है, जो की को वैल्यू से जोड़ता है। दूसरी प्रोग्रामिंग भाषाओं में map जैसी चीज़ को आपने डिक्शनरी, हैश टेबल, की/वैल्यू स्टोर या असोसिएटिव ऐरे जैसे नामों से देखा होगा।

सिंटैक्स के हिसाब से map ऐसा दिखता है:

map[KeyType]ElementType

यह जानना भी ज़रूरी है कि हर की अद्वितीय होती है। इसका मतलब यह है कि एक ही की को दो बार असाइन करने पर उससे जुड़ी वैल्यू बदल जाती है।

मैप बनाने के लिए आप यह कर सकते हैं:

  // With map literal
  foo := map[string]int{}

या

  // or with make function
  foo := make(map[string]int)

यहाँ कुछ ऑपरेशन दिए गए हैं जो आप मैप के साथ कर सकते हैं

  // Add a value in a map with the `=` operator:
  foo["bar"] = 42
  // Here we update the element of `bar`
  foo["bar"] = 73
  // To retrieve a map value, you can use
  baz := foo["bar"]
  // To delete an item from a map, you can use
  delete(foo, "bar")

अगर आप ऐसी की की वैल्यू निकालने की कोशिश करते हैं जो मैप में नहीं है, तो मैप उस वैल्यू टाइप की शून्य वैल्यू लौटाता है। यह बात आपको उलझा सकती है, खासकर तब जब आपके ElementType की डिफॉल्ट वैल्यू (जैसे किसी int के लिए 0) ही एक मान्य वैल्यू हो। यह जाँचने के लिए कि आपके मैप में कोई की है या नहीं, आप यह कर सकते हैं

  value, exists := foo["baz"]
  // If the key "baz" does not exist,
  // value: 0; exists: false

निर्देश

आपके एक दोस्त की Gross Store नाम की एक पुरानी थोक दुकान है। यह नाम उस मात्रा से आया है जिसमें यह दुकान सामान बेचती है: यहाँ सब कुछ ग्रोस इकाई में होता है। आपके दोस्त ने आपसे अपनी दुकान के लिए एक पॉइंट ऑफ सेल (POS) सिस्टम बनाने को कहा है। पहले आप उसका एक प्रोटोटाइप बनाना चाहते हैं। आपके प्रोटोटाइप में आपका सिस्टम सिर्फ मात्रा ही दर्ज करेगा। मदद के लिए आपके दोस्त ने आपको मापों की एक सूची दी है:

इकाई संख्या
quarter_of_a_dozen 3
half_of_a_dozen 6
dozen 12
small_gross 120
gross 144
great_gross 1728

1. माप की इकाई को अपने प्रोग्राम में संग्रहीत कीजिए

इस माप का उपयोग करने के लिए आपको वह माप अपने प्रोग्राम में संग्रहीत करना होगा।

units := Units()
fmt.Println(units)
// Output: map[...] with entries like ("dozen": 12)

2. ग्राहक का नया बिल बनाइए

आपको एक ऐसा फंक्शन बनाना है जो ग्राहक के लिए नया (खाली) बिल बनाता है।

bill := NewBill()
fmt.Println(bill)
// Output: map[]

3. ग्राहक के बिल में कोई चीज़ जोड़िए

इसे बनाने के लिए आपको यह करना होगा:

  • अगर दिया गया unit units मैप में न हो तो false लौटाइए।
  • वरना उस चीज़ को चीज़ के नाम पर इंडेक्स करके ग्राहक के bill में जोड़िए, और फिर true लौटाइए।
  • अगर वह चीज़ बिल में पहले से मौजूद है, तो उसकी मात्रा उतनी बढ़ाइए जितनी दिए गए unit की होती है।
bill := NewBill()
units := Units()
ok := AddItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: true (since dozen is a valid unit)

ध्यान रखिए कि लौटाई गई वैल्यू का टाइप bool है।

4. ग्राहक के बिल से कोई चीज़ हटाइए

इसे बनाने के लिए आपको यह करना होगा:

  • अगर दी गई चीज़ बिल में नहीं है तो false लौटाइए
  • अगर दिया गया unit units मैप में न हो तो false लौटाइए।
  • अगर नई मात्रा 0 से कम हो जाए तो false लौटाइए।
  • अगर नई मात्रा 0 है, तो उस चीज़ को bill से पूरी तरह हटाइए और फिर true लौटाइए।
  • वरना उस चीज़ की मात्रा घटाइए और true लौटाइए।
bill := NewBill()
units := Units()
ok := RemoveItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: false (because there are no carrots in the bill)

ध्यान रखिए कि लौटाई गई वैल्यू का टाइप bool है।

5. ग्राहक के बिल में मौजूद किसी खास चीज़ की मात्रा लौटाइए

इसे बनाने के लिए आपको यह करना होगा:

  • अगर item बिल में नहीं है तो 0 और false लौटाइए।
  • वरना बिल में उस चीज़ की मात्रा और true लौटाइए।
bill := map[string]int{"carrot": 12, "grapes": 3}
qty, ok := GetItem(bill, "carrot")
fmt.Println(qty)
// Output: 12
fmt.Println(ok)
// Output: true

ध्यान रखिए कि लौटाई गई वैल्यू के टाइप int और bool हैं।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Go Exercism

ग्रॉस स्टोर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट165 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।