متدهای آرایه در روبی
متدهای پرکاربرد آرایه: map، select، each، sort، reduce، group_by و...
متدهای آرایه چیست؟
متدهای آرایه توابعی هستند که روی آرایهها عمل میکنند. روبی دهها متد قدرتمند برای آرایه دارد.
متدهای پیمایش
each — پیمایش ساده
[1, 2, 3].each { |n| puts n }
each_with_index — پیمایش با ایندکس
["آ", "ب", "ج"].each_with_index { |val, i| puts "#{i}: #{val}" }
reverse_each — پیمایش برعکس
[1, 2, 3].reverse_each { |n| puts n } # => 3, 2, 1
متدهای تبدیل
map / collect — تبدیل هر عنصر
nums = [1, 2, 3, 4, 5]
squared = nums.map { |n| n ** 2 }
puts squared.inspect # => [1, 4, 9, 16, 25]
# شکل کوتاه با &
upcase_arr = ["ali", "reza"].map(&:upcase)
puts upcase_arr.inspect # => ["ALI", "REZA"]
select / filter — فیلتر کردن
nums = [1, 2, 3, 4, 5, 6]
evens = nums.select { |n| n.even? }
puts evens.inspect # => [2, 4, 6]
# reject — برعکس select
odds = nums.reject { |n| n.even? }
puts odds.inspect # => [1, 3, 5]
reduce / inject — تجمیع
nums = [1, 2, 3, 4, 5]
sum = nums.reduce(0) { |total, n| total + n }
puts sum # => 15
# شکل کوتاه
sum = nums.sum # => 15
product = nums.reduce(:*) # => 120
متدهای جستجو
| متد | توضیح | مثال |
|---|---|---|
find | اولین مورد منطبق | [1,2,3].find { odd? } → 1 |
select | همه موارد منطبق | [1,2,3].select { odd? } → [1,3] |
include? | آیا شامل؟ | [1,2].include?(2) → true |
any? | حداقل یکی؟ | [1,2].any? { odd? } → true |
all? | همه؟ | [2,4].all? { even? } → true |
none? | هیچکدام؟ | [2,4].none? { odd? } → true |
count | شمارش | [1,2,3].count → 3 |
متدهای مرتبسازی
nums = [3, 1, 4, 1, 5, 9, 2, 6]
# صعودی
puts nums.sort.inspect # => [1, 1, 2, 3, 4, 5, 6, 9]
# نزولی
puts nums.sort.reverse.inspect # => [9, 6, 5, 4, 3, 2, 1, 1]
# با بلوک
words = ["banana", "apple", "cherry"]
sorted = words.sort_by { |w| w.length }
puts sorted.inspect # => ["apple", "banana", "cherry"]
متدهای ترکیب و تقسیم
# ترکیب دو آرایه
a = [1, 2, 3]
b = [4, 5, 6]
puts (a + b).inspect # => [1, 2, 3, 4, 5, 6]
puts (a.zip(b)).inspect # => [[1, 4], [2, 5], [3, 6]]
# تفریق
puts ([1, 2, 3, 4] - [2, 4]).inspect # => [1, 3]
# اشتراک و اجتماع
puts ([1, 2, 3] & [2, 3, 4]).inspect # => [2, 3] (اشتراک)
puts ([1, 2, 3] | [2, 3, 4]).inspect # => [1, 2, 3, 4] (اجتماع)
# flatten
puts [1, [2, 3], [4, [5]]].flatten.inspect # => [1, 2, 3, 4, 5]
متدهای گروهبندی
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# group_by
grouped = nums.group_by { |n| n.even? }
puts grouped.inspect # => {false=>[1, 3, 5, 7, 9], true=>[2, 4, 6, 8]}
# partition
evens, odds = nums.partition { |n| n.even? }
puts evens.inspect # => [2, 4, 6, 8]
puts odds.inspect # => [1, 3, 5, 7, 9]
متدهای مفید دیگر
| متد | توضیح |
|---|---|
uniq | حذف تکراریها |
flatten | تسطیح آرایه چندبعدی |
compact | حذف nil |
join | ترکیب به رشته |
min / max | کوچکترین/بزرگترین |
sum | مجموع |
sample | عنصر تصادفی |
shuffle | بُر زدن |
tally | شمارش تکرار هر عنصر |
زنجیره متدها (Method Chaining)
result = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
.select { |n| n.even? } # => [2, 4, 6, 8, 10]
.map { |n| n ** 2 } # => [4, 16, 36, 64, 100]
.sum # => 220
puts result # => 220
خلاصه
| دسته | متدها |
|---|---|
| پیمایش | each, each_with_index, reverse_each |
| تبدیل | map, select, reject, reduce |
| جستجو | find, include?, any?, all? |
| مرتبسازی | sort, sort_by, reverse |
| ترکیب | +, zip, flatten, uniq |
| گروهبندی | group_by, partition, tally |
این مبحث بخشی از دوره آموزش کامل روبی است.