বার্ড কাউন্ট-এ আপনার পরিচয় করিয়ে দেওয়া হয়েছিল 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 অবজেক্ট এনুমারেট করা একেবারে একই, তবে পার্থক্য একটাই: ব্লকটি দুটি আর্গুমেন্ট পায়, কী (key) আর মান:
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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।