Ruby-তে অ্যারে হলো যেকোনো অবজেক্টের সাজানো, ইন্টিজার-ইনডেক্সযুক্ত কালেকশন।
অ্যারের ইনডেক্স শুরু হয় 0 থেকে।
ঋণাত্মক ইনডেক্স অ্যারের শেষের সাপেক্ষে ধরা হয়। যেমন -1 ইনডেক্স অ্যারের শেষ এলিমেন্টটি বোঝায়, -2 বোঝায় শেষ থেকে দ্বিতীয় এলিমেন্টটি, এভাবে চলতে থাকে।
অ্যারে সাধারণত [] নোটেশন দিয়ে তৈরি করা হয়।
এতে যেকোনো ভিন্ন ধরনের অবজেক্ট থাকতে পারে।
array = [1, "two", 3.0]
অ্যারের এলিমেন্টগুলো তাদের ইনডেক্স দিয়ে #[] মেথডের সাহায্যে পাওয়া যায়।
এটি নির্দিষ্ট ইনডেক্সের এলিমেন্ট রিটার্ন করে, অথবা শুরুর ইনডেক্স থেকে শুরু করে নির্দিষ্ট দৈর্ঘ্য পর্যন্ত চলা একটি সাবঅ্যারে রিটার্ন করে।
ঋণাত্মক ইনডেক্স অ্যারের শেষ থেকে পিছনের দিকে গণনা করে।
a = [ "a", "b", "c", "d", "e" ]
a[2] #=> "c"
a[6] #=> nil
a[1, 3] #=> [ "b", "c", "d" ]
a[-1] #=> "e"
a[-2] #=> "d"
a[-3, 2] #=> ["c", "d"]
অ্যারের উপর অনেক কাজের হেল্পার মেথড আছে। এখানে আরও কমন কয়েকটি দেওয়া হলো:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.size #=> 8
fibonacci.sum #=> 33
fibonacci.reverse #=> [13, 8, 5, 3, 2, 1, 1, 0]
কালেকশনের মধ্য দিয়ে ইটারেট করতে লুপ ব্যবহার না করে Ruby-তে আমরা এনুমারেশন ব্যবহার করি।
এনুমারেশন হলো একটি কালেকশনের (এক্ষেত্রে একটি অ্যারে) মধ্য দিয়ে একে একে এগিয়ে গিয়ে প্রতিটি অবজেক্টের উপর কিছু একটি কাজ করার প্রক্রিয়া। এনুমারেশন Ruby-র একটি মূল ধারণা এবং এটি সর্টিং, গ্রুপিং, ম্যাপিং, রিডিউসিংসহ আরও অনেক কাজে ব্যবহৃত হয়।
একটি অ্যারের প্রতিটি শব্দ প্রিন্ট করার এনুমারেশন দেখতে এমন হবে:
words = ["the", "cat", "sat"]
words.each do |word|
puts word
end
# Output:
# the
# cat
# sat
এই উদাহরণে আমরা আমাদের অ্যারের উপর .each মেথড কল করেছি এবং একটি ব্লক পাস করেছি, যা একটি প্যারামিটার (word) নেয় এবং তা প্রিন্ট করে।
Track-এর পরে আরও গভীরে গিয়ে আমরা ব্লক নিয়ে আলোচনা করব, তবে আপাতত এগুলোকে এমন অ্যানোনিমাস ফাংশন হিসেবে ভাবুন যেগুলো শূন্য বা তার বেশি আর্গুমেন্ট নিতে পারে।
এগুলো উপরের do...end সিনট্যাক্স দিয়ে, অথবা নিচের {} সিনট্যাক্স দিয়ে ডিফাইন করা যায়।
ব্লক ব্যবহার করে এমন আরও কিছু অ্যারে মেথডের উদাহরণ এখানে দেওয়া হলো:
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
fibonacci.count { |number| number == 1 } #=> 2
fibonacci.any? { |number| number == 6 } #=> false
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]
আপনি একজন আগ্রহী পাখি-পর্যবেক্ষক, যিনি গত সাত দিনে আপনার বাগানে কতগুলো পাখি এসেছে তার হিসাব রাখেন।
আপনার পাঁচটি কাজ আছে, যার সবগুলোই আপনার বাগানে আসা পাখির সংখ্যা নিয়ে।
তুলনার জন্য আপনি সবসময় কাছে গত সপ্তাহের সংখ্যাগুলোর একটি কপি রাখেন, যেগুলো ছিল: 0, 2, 5, 3, 7, 8 এবং 4। গত সপ্তাহের সংখ্যাগুলো রিটার্ন করে এমন BirdCount.last_week মেথডটি ইমপ্লিমেন্ট করুন:
BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]
গতকাল আপনার বাগানে কতগুলো পাখি এসেছিল তা রিটার্ন করতে BirdCount#yesterday মেথডটি ইমপ্লিমেন্ট করুন। পাখির সংখ্যাগুলো দিন অনুযায়ী সাজানো, যেখানে প্রথম এলিমেন্টটি সবচেয়ে পুরনো দিনের সংখ্যা আর শেষ এলিমেন্টটি আজকের সংখ্যা।
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4
আপনার বাগানে আসা পাখির মোট সংখ্যা রিটার্ন করতে BirdCount#total মেথডটি ইমপ্লিমেন্ট করুন:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19
কিছু দিন অন্য দিনের চেয়ে বেশি ব্যস্ত থাকে। ব্যস্ত দিন বলতে সেই দিনকে বোঝায়, যেদিন পাঁচটি বা তার বেশি পাখি আপনার বাগানে এসেছে।
ব্যস্ত দিনের সংখ্যা রিটার্ন করতে BirdCount#busy_days মেথডটি ইমপ্লিমেন্ট করুন:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2
BirdCount#day_without_birds? মেথডটি ইমপ্লিমেন্ট করুন, যা true রিটার্ন করবে যদি এমন কোনো দিন থাকে যেদিন শূন্য পাখি বাগানে এসেছে; নাহলে false রিটার্ন করবে:
birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Exercism-এ সাইন আপ করুন, Ruby ট্র্যাকের 21টি কনসেপ্ট121টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।