Z
ZHANK
控制流程

迭代器与 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 社区极度偏爱迭代器——它们可组合、可链式、更声明式。