迭代器与 each
each 遍历、each_with_index、map/select 转换、迭代器哲学
迭代器与 each
Ruby 的迭代器哲学贯穿整个语言——each/map/select 替代了 for 循环的角色。
学完本章你将: 掌握 each/each_with_index、map/select、迭代器哲学。
each —— 最基本的迭代器
ruby
arr = [10, 20, 30]
# 遍历元素
arr.each { |n| puts n }
# 带索引
arr.each_with_index { |n, i| puts "#{i}: #{n}" }
# 0: 10, 1: 20, 2: 30
# Hash 遍历
{ a: 1, b: 2 }.each { |key, value| puts "#{key}=#{value}" }
map / select
ruby
nums = [1, 2, 3, 4, 5]
# map —— 转换每个元素
doubled = nums.map { |n| n * 2 }
# [2, 4, 6, 8, 10]
# select —— 过滤
even = nums.select { |n| n.even? }
# [2, 4]
# 简写
even = nums.select(&:even?)
doubled = nums.map { _1 * 2 } # Ruby 2.7+ 编号参数
迭代器 vs 循环
ruby
# ❌ 传统循环
result = []
for n in nums
result << n * 2 if n.even?
end
# ✅ Ruby 风格
result = nums.select(&:even?).map { |n| n * 2 }
💡 Ruby 社区极度偏爱迭代器——它们可组合、可链式、更声明式。