ट्रैक
/
Swift
Swift
/
अभ्यास
/
सांता का स्विफ्टी मददगार
सांता का स्विफ्टी मददगार

सांता का स्विफ्टी मददगार

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

परिचय

टपल कई वैल्यू को मिलाकर एक कंपाउंड वैल्यू बनाते हैं। ऐरे की तरह नहीं, टपल की सभी वैल्यू का एक ही टाइप होना ज़रूरी नहीं है, और टपल बनने के बाद उसका साइज़ तय रहता है।

टपल बनाने के लिए कॉमा से अलग की गई वैल्यू को गोल ब्रैकेट के अंदर लिखिए:

let order = ("biscuits", 2.99, 3)

आप टाइप एनोटेशन साफ़-साफ़ लिख भी सकते हैं:

let order: (String, Double, Int) = ("biscuits", 2.99, 3)

बिना नाम वाले टपल से अलग-अलग एलिमेंट निकालने के लिए शून्य से शुरू होने वाला इंडेक्स सिंटैक्स इस्तेमाल कीजिए (.0, .1, आदि):

let item = order.0     // "biscuits"
let quantity = order.2 // 3

नाम वाले टपल

टपल बनाते समय आप उसके अलग-अलग एलिमेंट को नाम दे सकते हैं:

let order = (item: "biscuits", price: 2.99, quantity: 3)

एलिमेंट को नाम देने से कोड पढ़ने में आसान हो जाता है, और आप उनके लेबल के साथ डॉट नोटेशन इस्तेमाल करके एलिमेंट तक पहुँच सकते हैं:

let item = order.item         // "biscuits"
let quantity = order.quantity // 3

टाइप एनोटेशन में भी एलिमेंट के नाम लिख सकते हैं:

let order: (item: String, price: Double, quantity: Int) = (item: "biscuits", price: 2.99, quantity: 3)

टपल में बदलाव करना

अगर किसी टपल को वेरिएबल (var) के रूप में घोषित किया गया हो, तो आप उसके एलिमेंट बदल सकते हैं:

var order = ("biscuits", 2.99, 3)
order.0 = "cookies"
order.1 = 1.99
order.2 = 5

print(order)
// Prints ("cookies", 1.99, 5)

एक से अधिक वैल्यू लौटाना

Swift के फंक्शन सिर्फ एक ही वैल्यू लौटा सकते हैं, लेकिन टपल लौटाने से आप कई वैल्यू को एक साथ पैक करके फंक्शन से लौटा सकते हैं:

func divide(_ dividend: Int, by divisor: Int) -> (quotient: Int, remainder: Int) {
    let quotient = dividend / divisor
    let remainder = dividend % divisor
    return (quotient, remainder)
}

let result = divide(14, by: 4)
print("Quotient: \(result.quotient), Remainder: \(result.remainder)")
// Prints "Quotient: 3, Remainder: 2"

टपल को खोलना

आप टपल की वैल्यू को अलग-अलग कॉन्स्टेंट या वेरिएबल में बाँट सकते हैं, यानी टपल को खोल सकते हैं:

let order = ("biscuits", 2.99, 3)
let (item, price, quantity) = order

print(item) // Prints "biscuits"

टपल को खोलना for-in लूप में भी सीधे काम करता है:

let orders = [("biscuits", 2.99, 3), ("cookies", 1.99, 5)]

for (item, price, quantity) in orders {
    print("Item: \(item), Price: \(price), Quantity: \(quantity)")
}

निर्देश

आप सांता क्लॉज़ के लॉजिस्टिक्स विभाग में काम करने वाले एक एल्फ हैं, और आपके बॉस ने सिस्टम के सॉफ्टवेयर को अपग्रेड करने के लिए आपको दो काम दिए हैं।

1. खिलौने का नाम पता कीजिए

सिस्टम को डेटाबेस से किसी खिलौने का नाम निकाल पाना चाहिए। डेटाबेस (name: String, quantity: Int) टाइप के ट्यूपल्स से बना है।

फंक्शन getName(_:) बनाइए, जो एक ऐसा आर्गुमेंट लेता है जिसमें (name: String, quantity: Int) टाइप का ट्यूपल होता है।

let toy = (name: "Doll", quantity: 10)
getName(toy)
// Returns "Doll"

2. डेटाबेस में नया खिलौना जोड़िए

खिलौनों का बाज़ार तेज़ी से बदलता है, जो लोकप्रिय है वह बहुत जल्दी बदल जाता है। इसलिए एक ऐसे फंक्शन की ज़रूरत है जो नया खिलौना बनाए।

फंक्शन createToy(name:amount:) बनाइए, जो एक आर्गुमेंट name लेता है जिसमें खिलौने का नाम होता है, और amount लेता है जिसमें खिलौने की संख्या होती है।

createToy(name: "Doll", amount: 10)
// Returns (name: "Doll", amount: 10)

3. किसी खिलौने की संख्या अपडेट कीजिए

सांता की कार्यशाला के एल्फ लगातार और खिलौने बनाते रहते हैं, और सांता को हर खिलौने की संख्या का हिसाब रखना होता है। इसके लिए सिस्टम को डेटाबेस में किसी खिलौने की संख्या अपडेट कर पाना चाहिए।

फंक्शन updateQuantity(_:toy:Amount:) बनाइए, जो ये आर्गुमेंट लेता है:

  • toys जिसमें (name: String, quantity: Int) टाइप के ट्यूपल्स का ऐरे होता है।
  • toy जिसमें अपडेट करने वाले खिलौने का नाम होता है।
  • amount जिसमें खिलौने की नई संख्या होती है।

आप मान सकते हैं कि खिलौना पहले से डेटाबेस में है, और इसकी जाँच करने की ज़रूरत नहीं है।

let toys = [(name: "Doll", quantity: 10), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
updateQuantity(toys, toy: "Doll", amount: 15)
// Returns [(name: "Doll", quantity: 15), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]

4. किसी खिलौने में कैटेगरी की जोड़िए

सांता डेटाबेस के खिलौनों को श्रेणियों में बाँट पाना चाहते हैं। इससे डिलीवरी करते समय उन्हें खिलौने आसानी से मिल जाएँगे, और डेटाबेस के खिलौनों को क्रम में लगाया जा सकेगा।

लेकिन जब सिस्टम पहली बार बनाया गया था, तब कैटेगरी की छूट गई थी। अब सिस्टम को डेटाबेस के किसी खिलौने में कैटेगरी की जोड़ पाना चाहिए।

फंक्शन addCategory(_:category:) बनाइए, जो ये आर्गुमेंट लेता है:

  • toys जिसमें (name: String, quantity: Int) टाइप के ट्यूपल्स का ऐरे होता है।
  • category जिसमें खिलौनों में जोड़ने वाली कैटेगरी की होती है।

आप मान सकते हैं कि खिलौना पहले से डेटाबेस में है, और इसकी जाँच करने की ज़रूरत नहीं है। आप यह भी मान सकते हैं कि खिलौने में पहले से कोई कैटेगरी की नहीं है।

let toys = [(name: "Car", quantity: 5), (name: "Train", quantity: 3)]
addCategory(toys, category: "Vehicle")
// Returns [(name: "Car", quantity: 5, category: "Vehicle"), (name: "Train", quantity: 3, category: "Vehicle")]
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Swift Exercism

सांता का स्विफ्टी मददगार शुरू करने के लिए तैयार हैं?

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