متدهای آرایه در روبی

متدهای پرکاربرد آرایه: 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

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط