"पक्षी गणना" में आपका परिचय count, any?, select, all? और map एन्यूमरेशन मेथड से हुआ था।
यहाँ उनका दोहराव है, साथ में कुछ अतिरिक्त मेथड भी:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number > 20 } #=> false
fibonacci.none? { |number| number > 20 } #=> true
fibonacci.select { |number| number.odd? } #=> [1, 1, 3, 5, 13]
fibonacci.all? { |number| number < 20 } #=> true
fibonacci.map { |number| number * 2 } #=> [0, 2, 2, 4, 6, 10, 16, 26]
fibonacci.select { |number| number >= 5 } #=> [5, 8, 13]
fibonacci.find { |number| number >= 6 } #=> 8
# Some methods work with or without a block
fibonacci.sum #=> 33
fibonacci.sum { |number| number * number } #=> 273
# There are also methods to help with nested arrays:
animals = [ ['cat', 'bob'], ['horse', 'caris'], ['mouse', 'arya'] ]
animals.flatten #=> ["cat", "bob", "horse", "caris", "mouse", "arya"]
Hash ऑब्जेक्ट को एन्यूमरेट करना बिल्कुल Array ऑब्जेक्ट को एन्यूमरेट करने जैसा ही है, बस अंतर यह है कि ब्लॉक को दो आर्गुमेंट मिलते हैं: की और वैल्यू:
pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.each { |animal, name| ... }
अगर आपको इनमें से सिर्फ एक वैल्यू चाहिए, तो आप विशेष _ चिह्न का इस्तेमाल करके बता सकते हैं कि दूसरी वैल्यू की ज़रूरत नहीं है।
इससे डेवलपर के लिए चीज़ें साफ रहती हैं और प्रदर्शन भी बेहतर होता है।
pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.map { |_, name| name } #=> ["bob", "caris", "arya"]
आप नेस्टेड ब्लॉक में भी एन्यूमरेट कर सकते हैं, और मेथड को एक के बाद एक जोड़ सकते हैं। उदाहरण के लिए, मान लीजिए हमारे पास जानवरों के हैश का एक ऐरे है, और हमें छोटे नाम वाले जानवर निकालने हैं, तो हम कुछ ऐसा लिख सकते हैं:
pets = [
{ animal: "cats", names: ["bob", "fred", "sandra"] },
{ animal: "horses", names: ["caris", "black beard", "speedy"] },
{ animal: "mice", names: ["arya", "jerry"] }
]
pets.map { |pet|
pet[:names].select { |name| name.length <= 5 }
}.flatten.sort
#=> ["arya", "bob", "caris", "fred", "jerry"]
आप एक ऑनलाइन फैशन बुटीक चलाते हैं। आपकी सालाना बड़ी सेल आने वाली है, इसलिए आप कुछ ऐसी सुविधाएँ बनाना चाहते हैं जिनसे अपनी इन्वेंटरी का हिसाब रखकर यह पक्का कर सकें कि आप तैयार हैं।
इन्वेंटरी का एक आइटम एक हैश से दर्शाया जाता है, और पूरी इन्वेंटरी इन हैशों का एक ऐरे होती है।
[
{
name: "White Shirt",
price: 40,
quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}
},
{ ... }
]
BoutiqueInventory.item_names लागू कीजिए। इसे आइटम के नामों का ऐरे वर्णमाला के क्रम में लौटाना चाहिए।
BoutiqueInventory.new([
{price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
{price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
{price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).item_names
#=> ["Bamboo Socks Cats", "Black Short Skirt", "Maxi Brown Dress", "Red Short Skirt"]
BoutiqueInventory.cheap लागू कीजिए। इसे वे सभी आइटम लौटाने चाहिए जिनकी कीमत $30 से कम है।
BoutiqueInventory.new([
{price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
{price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
{price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).cheap
# => [
# {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
# {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
# ]
BoutiqueInventory.out_of_stock लागू कीजिए। इसे वे सभी आइटम लौटाने चाहिए जिनका कोई स्टॉक नहीं है (यानी जिनमें quantity_by_size खाली है)।
BoutiqueInventory.new([
{price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
{price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
{price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).out_of_stock
#=> [{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}}]
किसी आइटम का नाम देखकर उसका स्टॉक लौटाने के लिए BoutiqueInventory.stock_for_item(name) लागू कीजिए:
BoutiqueInventory.new([
{price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
{price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
{price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).stock_for_item("Black Short Skirt")
#=> {s: 1, xl: 4}
अपने गोदाम में मौजूद आइटम की कुल संख्या निकालने के लिए BoutiqueInventory.total_stock लागू कीजिए:
BoutiqueInventory.new([
{price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
{price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
{price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).total_stock
#=> 36
Exercism पर साइन अप कीजिए और Ruby को 21 कॉन्सेप्ट121 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।