迭代器和块

概述

在 Ruby 中,迭代器和块是处理集合数据的重要工具。迭代器是一种方法,它允许你遍历集合(如数组或哈希)中的每个元素,并对每个元素执行某些操作。块是 Ruby 中的一种代码块,它可以与迭代器一起使用,以定义在每个元素上执行的操作。

迭代器

什么是迭代器?

迭代器是一种方法,它允许你遍历集合中的每个元素。Ruby 提供了多种内置的迭代器方法,如 each、map、select 等。

常见的迭代器方法

each

each 是最常用的迭代器之一。它遍历集合中的每个元素,并将每个元素传递给块。

# 示例:使用 each 遍历数组
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
  puts "I love #{fruit}!"
end

map

map 方法遍历集合中的每个元素,并对每个元素执行块中的操作,最后返回一个新的数组,其中包含每个元素经过块操作后的结果。

# 示例:使用 map 将数组中的每个元素转换为大写
fruits = ["apple", "banana", "cherry"]
uppercase_fruits = fruits.map do |fruit|
  fruit.upcase
end
puts uppercase_fruits.inspect  # 输出: ["APPLE", "BANANA", "CHERRY"]

select

select 方法遍历集合中的每个元素,并根据块中的条件选择符合条件的元素,返回一个新的数组。

# 示例:使用 select 选择数组中长度大于 5 的元素
fruits = ["apple", "banana", "cherry"]
long_fruits = fruits.select do |fruit|
  fruit.length > 5
end
puts long_fruits.inspect  # 输出: ["banana"]

块

什么是块?

块是 Ruby 中的一种代码块,它可以与迭代器一起使用,以定义在每个元素上执行的操作。块可以有两种形式:do...end 和 {...}。

块的语法

do...end 块

# 示例:使用 do...end 块
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
  puts "I love #{fruit}!"
end

{...} 块

# 示例:使用 {...} 块
fruits = ["apple", "banana", "cherry"]
fruits.each { |fruit| puts "I love #{fruit}!" }

块的参数

块可以接受参数,这些参数通常是集合中的元素。在块中,你可以使用这些参数来执行操作。

# 示例:块接受参数
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
  puts "I love #{fruit}!"
end

实践练习

练习 1:使用 each 遍历数组

编写一个 Ruby 程序,使用 each 方法遍历一个数组,并打印每个元素的平方。

numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
  puts number ** 2
end

练习 2:使用 map 转换数组

编写一个 Ruby 程序,使用 map 方法将一个数组中的每个元素转换为其平方,并返回一个新的数组。

numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.map do |number|
  number ** 2
end
puts squared_numbers.inspect

练习 3:使用 select 过滤数组

编写一个 Ruby 程序,使用 select 方法从一个数组中选择所有偶数,并返回一个新的数组。

numbers = [1, 2, 3, 4, 5]
even_numbers = numbers.select do |number|
  number.even?
end
puts even_numbers.inspect

总结

迭代器和块是 Ruby 中处理集合数据的强大工具。通过使用迭代器,你可以轻松地遍历集合中的每个元素,并对每个元素执行操作。块则允许你定义这些操作,使代码更加简洁和易读。通过实践练习,你可以更好地掌握这些概念,并在实际编程中灵活运用。