অ্যারে কী?
অ্যারে হল একটি বিল্ট-ইন রুবি ক্লাস, যে শূন্য বা অধিক আইটেমের একটি তালিকা ধারণ করে, এবং সেগুলো সহজে যোগ, অ্যাক্সেস ও লুপ করার মেথডগুলো অন্তর্ভুক্ত করে।
এটি সহায়ক, কারণ অ্যারে না থাকলে আপনাকে অনেক ভেরিয়েবল ব্যবহার করতে হত।
উদাহরণ:
a = 1 b = 2 c = 3
বদলে, আপনি করতে পারেন:
numbers = [1, 2, 3]
সর্বোত্তম অংশ?
আপনি অ্যারেতে যেকোনো কিছু রাখতে পারেন!
যেমন:
- সংখ্যা
- স্ট্রিং
- আরও অ্যারে! (এটি একটি মাল্টি-ডাইমেনশনাল অ্যারে তৈরি করবে)
আসুন অ্যারে সম্পর্কে আরও জানি যাতে আপনি সেটির সর্বোত্তম ব্যবহার করতে পারেন!
সূচিপত্র
- ১ অ্যারে শূন্য-ইন্ডেক্সড (Zero-Indexed)
- ২ রুবি অ্যারে মেথডগুলো
- ৩ অ্যারে কীভাবে স্ট্রিং-এ রূপান্তর করবেন
- ৪ মাল্টি-ডাইমেনশনাল অ্যারে (২ডি অ্যারে ও আরও)
- ৫ রুবি অ্যারে কীভাবে ইটারেট করবেন
- ৬ নেগেটিভ ইন্ডেক্সিং
- ৭ আরও অ্যারে অপারেশন
- ৮ একাধিক অ্যারের সাথে অপারেশন
- ৯ উপসংহার
- ৯.১ সম্পর্কিত
অ্যারে শূন্য-ইন্ডেক্সড (Zero-Indexed)
আপনি ইন্ডেক্স ব্যবহার করে অ্যারেতে থাকা এলিমেন্টগুলো অ্যাক্সেস করতে পারেন, যা ০ থেকে শুরু হয়।
যদি আপনার কাছে "cat", "dog" এবং "tiger" শব্দগুলোর একটি অ্যারে থাকে, তবে সেটি এরকম দেখাবে:

ছবির ডেটাকে রিপ্রেজেন্ট করে এমন একটি কোড উদাহরণ:
["cat", "dog", "tiger"]
এখন:
আপনি আবিষ্কার করবেন অ্যারেতে আপনি কী কী করতে পারেন!
রুবি অ্যারে মেথডগুলো
আসুন শিখি কীভাবে একটি অ্যারে তৈরি করা যায়।
আপনি একটি খালি অ্যারে তৈরি করে সেখানে নতুন আইটেম যোগ করতে পারেন, বা প্রাথমিক মানসহ একটি অ্যারে তৈরি করতে পারেন।
খালি অ্যারে আরম্ভ করা:
users = []
ডেটাসহ অ্যারে আরম্ভ করা:
users = ["john", "david", "peter"]
যদি আপনি স্ট্রিং-মাত্র অ্যারে তৈরি করেন...
তাহলে প্রতিটি স্ট্রিং-এর জন্য কোটেশন টাইপ করার থেকে বাঁচতে %w ব্যবহার করে অ্যারে তৈরি করতে পারেন।
উদাহরণ:
users = %w(john david peter)
এখন যেহেতু আমাদের একটি অ্যারে আছে, আপনি সেটি obsah করা এলিমেন্টগুলো অ্যাক্সেস করতে পারেন।
এখানে কীভাবে:
users[0] # অ্যারের প্রথম এলিমেন্ট users[1] # অ্যারের দ্বিতীয় এলিমেন্ট users[2] # অ্যারের তৃতীয় এলিমেন্ট
আপনি first এবং last মেথডগুলোও ব্যবহার করতে পারেন:
users.first # অ্যারের প্রথম এলিমেন্ট users.last # অ্যারের শেষ এলিমেন্ট
আপনার অ্যারেতে আইটেম যোগ করার উপায়:
# এই দুটোরই একই প্রভাব, << পছন্দনীয়। users.push "andrew" users << "andrew"
এখানে আপনার অ্যারে থেকে এলিমেন্ট মুছে ফেলার উপায়:
last_user = users.pop # অ্যারের শেষ এলিমেন্ট সরিয়ে সেটি ফেরত দেয় user.delete_at(0) # অ্যারের প্রথম এলিমেন্ট সরিয়ে দেয়
shift ও unshift মেথডগুলোও আছে, যা pop/push-এর মতো কিন্তু অ্যারের সামনে এলিমেন্ট যোগ বা বাদ দেয়।
users.unshift "robert" # অ্যারের সামনে একটি এলিমেন্ট যোগ করে users.shift # অ্যারের প্রথম এলিমেন্ট সরিয়ে সেটি ফেরত দেয়
এই অ্যারে কোনো নির্দিষ্ট আইটেম ধারণ করছে কিনা?
রুবিতে অ্যারেতে কোনো মান আছে কিনা চেক করা:
numbers = [1,2,3] numbers.include?(2) # true numbers.include?(10) # false
অ্যারের দৈর্ঘ্য কত? (অর্থাৎ, এতে কতগুলো এলিমেন্ট আছে)
words = ["cat", "coconut", "bacon"] words.size # 3
এখানে আপনার জন্য একটি ছোট চিটশিট:
| অপারেশন | মেথডগুলো |
|---|---|
| আরম্ভ করা | Array.new, [], %w |
| পড়া | [0], first, last |
| যোগ করা | push, <<, unshift |
| মুছে ফেলা | pop, delete_at, shift |
অ্যারে কীভাবে স্ট্রিং-এ রূপান্তর করবেন
আপনি যেকোনো অ্যারে কে স্ট্রিং-এ রূপান্তর করতে পারেন Array#join মেথড ব্যবহার করে।
এখানে একটি উদাহরণ:
letters = %w(a b c d) letters.join # "abcd"
লক্ষ্য করুন এই মেথড ১টি ঐচ্ছিক প্যারামিটার নেয় যাতে আপনি অ্যারে এলিমেন্টগুলো একসাথে জোড়া করার সময় সেপারেটর ডিফাইন করতে পারেন।
letters = %w(a b c d) letters.join(" ") # "a b c d"
যদি আপনি বিপরীত অপারেশন চান, অর্থাৎ স্ট্রিং থেকে অ্যারে, তবে split মেথড ব্যবহার করুন:
"a b c".split
ফলাফল:
["a", "b", "c"]
মাল্টি-ডাইমেনশনাল অ্যারে (২ডি অ্যারে ও আরও)
একটি অ্যারে অন্য অ্যারেগুলো থেকে গঠিত হতে পারে, একে আমরা মাল্টি-ডাইমেনশনাল অ্যারে বলি।
২ডি অ্যারে উদাহরণ:
users = [ [1, 'Peter'], [2, 'Steven'] ]
প্রথম সাব-অ্যারে থেকে প্রথম এলিমেন্ট অ্যাক্সেস করতে এই সিনট্যাক্স ব্যবহার করুন:
users[0][0] # 1
এবং প্রথম সাব-অ্যারের দ্বিতীয় এলিমেন্টের জন্য:
users[0][1] # 'Peter'
কিছু ক্ষেত্রে আপনি মাল্টি-ডাইমেনশনাল অ্যারে কে একটি সাধারণ অ্যারেতে রূপান্তর করতে চাইতে পারেন।
আপনি এটি flatten মেথড ব্যবহার করে করতে পারেন:
users.flatten # [1, "Peter", 2, "Steven"]
রুবি অ্যারে কীভাবে ইটারেট করবেন
এখন যেহেতু আপনার কাছে একটি অ্যারে আছে, কি সেটির কন্টেন্ট Enum করে প্রিন্ট করা দারুণ হবে?
খুশির খবর হল আপনি এটি করতে পারেন!
উদাহরণ: each ব্যবহার করে আপনার অ্যারে প্রিন্ট করুন
users.each { |item| puts item }
যদি আপনাকে মান এবং ইন্ডেক্স দুটোর সাথে কাজ করতে হয়, তবে অ্যারের each_with_index মেথড ব্যবহার করুন:
users.each_with_index { |item, idx| puts "#{item} with index #{idx}" }
নোট: এই লুপিং অপারেশনগুলোর অধিকাংশ Enumerable মডিউলের 덕택ে উপলব্ধ, যা ডিফল্টভাবে Array ক্লাসে মিক্সড থাকে।
উদাহরণ: map ব্যবহার করে আপনার অ্যারেতে থাকা প্রতিটি শব্দ ক্যাপিটালাইজ করুন।
users = users.map { |user| user.capitalize } users = users.map(&:capitalize)
map মেথড অ্যারে-কে ইন-প্লেস মডিফাই করে না, এটি মডিফাইড এলিমেন্টসহ একটি নতুন অ্যারে ফেরত দেয়, তাই ফলাফল একটি ভেরিয়েবলে অ্যাসাইন করতে হবে।
map! (এক্সক্লামেশন পয়েন্ট লক্ষ্য করুন) মেথড আছে যা সরাসরি অ্যারে মডিফাই করে, কিন্তু সাধারণত সিম্পল ভার্সনই পছন্দনীয়।
আপনি যে একটি জিনিস করতে চাইতে পারেন তা হল আপনার অ্যারেতে থাকা নির্দিষ্ট মাপদণ্ড পূরণ করা সব আইটেম খোঁজা।
উদাহরণ: ১০-এর চেয়ে বড় সব সংখ্যা খুঁজুন:
numbers = [3, 7, 12, 2, 49] numbers.select { |n| n > 10 } # => 12, 49
নেগেটিভ ইন্ডেক্সিং
আপনি শিখেছেন যে রুবি অ্যারেতে নির্দিষ্ট এলিমেন্ট অ্যাক্সেস করতে হলে ইন্ডেক্সিং (বা first ও last মেথড) ব্যবহার করতে হয়।
কিন্তু নেগেটিভ ইন্ডেক্সিং কী?
আমি -1 নক আপনার অ্যারে ইন্ডেক্স হিসেবে ব্যবহার করার কথা বলছি।
রুবি অ্যারের শেষ থেকে শুরু করবে। সুতরাং -1 আপনাকে শেষ আইটেম দেবে, -2 দ্বিতীয় শেষ আইটেম দেবে, ইত্যাদি।
উদাহরণ:
letters = ["a", "b", "c"] letters[-1] # "c" letters[-2] # "b"
আরও অ্যারে অপারেশন
অ্যারে ব্যবহার করে অনেক কিছু করা যায়, যেমন সর্ট করা বা র্যান্ডম এলিমেন্ট বাছাই করা।
আপনি অ্যারে সর্ট করার জন্য sort মেথড ব্যবহার করতে পারেন, এটি স্ট্রিং বা সংখ্যা থাকলে ভালো কাজ করে। আরও অ্যাডভান্সড সর্টের জন্য sort_by দেখুন।
numbers = numbers.sort
আপনি অ্যারে থেকে ডুপ্লিকেট এলিমেন্টও সরাতে পারেন, যদি আপনি এটি বারবার করেন তবে সেট (Set) ব্যবহার করার কথা ভাবতে পারেন।
numbers = [1, 3, 3, 5, 5] numbers = numbers.uniq # => [1, 3, 5]
লক্ষ্য করুন এটি আপনার অ্যারে স্থায়ীভাবে পরিবর্তন করে না। অধিকাংশ রুবি মেথড আপনার চাওয়া পরিবর্তনসহ একটি নতুন অ্যারে তৈরি করে। তাই ফলাফল সংরক্ষণ করতে হলে ভেরিয়েবল ব্যবহার করতে হবে অথবা এই উদাহরণে uniq! মেথড ব্যবহার করতে হবে।
যদি আপনি আপনার অ্যারে থেকে একটি র্যান্ডম এলিমেন্ট বাছাই করতে চান, তবে sample মেথড ব্যবহার করুন:
numbers.sample
আপনি "slice" বা টুকরো করার জন্যও অ্যারে ব্যবহার করতে পারেন, পুরো অ্যারে না নিয়ে এর একটি অংশ নেওয়া।
উদাহরণ: অ্যারে থেকে প্রথম ৩টি এলিমেন্ট নিন, অ্যারে পরিবর্তন না করে:
numbers.take(3) numbers[0,3]
আপনি আরও অ্যাডভান্সড রুবি অ্যারে স্লাইসিং করতে পারেন। উদাহরণস্বরূপ, আপনি প্রথম এলিমেন্ট বাদ দিয়ে বাকি সব এলিমেন্ট চাইতে পারেন:
numbers[1..-1]
কমা (0,3) এবং রেঞ্জ (1..-1) এর পার্থক্য লক্ষ্য করুন। প্রথমটি বলে "ইন্ডেক্স ০ থেকে শুরু করে ৩টি এলিমেন্ট দাও", দ্বিতীয়টি বলে "এই রেঞ্জের ক্যারেক্টারগুলো দাও"।
অ্যারের আকার পান:
numbers.size # 5
অ্যারে খালি কিনা চেক করুন:
numbers.empty? # false
nil মান সরান:
numbers << nil # [1, 3, 3, 5, 5, nil] numbers.compact # [1, 3, 3, 5, 5]
একাধিক অ্যারের সাথে অপারেশন
যদি আপনার দুটি অ্যারে থাকে এবং সেগুলো একসাথে জোড়া বা মার্জ করতে চান, তবে এভাবে করুন:
# দ্রুত, কারণ এটি users অ্যারে পরিবর্তন করে users.concat(new_users) # ধীর, কারণ এটি নতুন অ্যারে তৈরি করে users += new_users
আপনি একে অপর অ্যারে থেকে এলিমেন্টও সরাতে পারেন, যেখানে users_to_deleteও একটি অ্যারে:
users = users - users_to_delete
শেষে, আপনি দুটি অ্যারেতে একসাথে উপস্থিত এলিমেন্টগুলো পেতে পারেন:
users & new_users
উপসংহার
রুবি অ্যারে খুবই উপকারী এবং এটি আপনার পাশে একটি শক্তিশালী সহযোগী হবে।
অ্যারে তৈরি করা, সেখানে এলিমেন্ট যোগ করা, ইন্ডেক্স দিয়ে এলিমেন্ট অ্যাক্সেস করা ইত্যাদি প্র্যাক্টিস করুন। রুবি হ্যাশ সম্পর্কেও পড়ুন, আরেকটি গুরুত্বপূর্ণ ক্লাস যা অ্যারের সাথে কম্বাইন করে আরও আকর্ষণীয় কোড লিখতে সাহায্য করে।
অনুশীলনই পূর্ণতা!
যদি এটি উপকারী লাগে তবে এই পোস্ট শেয়ার করুন এবং নিচে আমার নিউজলেটার সাবস্ক্রাইব করুন 🙂