在 Ruby 中使用注入方法

Nurudeen Ibrahim 2023年1月30日 2022年5月18日
  1. Ruby 中注入方法的语法
  2. 在 Ruby 中使用 Inject 方法对数组求和
  3. 使用 Ruby 中的 Inject 方法从数组构建哈希
  4. 在 Ruby 中使用 Inject 方法过滤数组
在 Ruby 中使用注入方法

本文将演示 Ruby 中 inject 方法的不同用途。

Ruby 中注入方法的语法

inject 方法采用一个包含两个参数的块。第一个参数是一个累加器,即被计算表达式的总和,第二个参数是当前数组项。

语法:

inject (initial_value) { |accumulator, array_item| expression }

在 Ruby 中使用 Inject 方法对数组求和

示例代码:

numbers = [5, 6, 7, 8]
sum = numbers.inject (0) { |result, item| result + item }
puts sum

输出:

26

在上面的示例中,初始值为 0。

累加器存储在 result 变量中,每次迭代都会更新,它是 result + item 的结果。item 变量是当前数组值。

使用 Ruby 中的 Inject 方法从数组构建哈希

示例代码:

students = [["John", "Grade 2"], ["Michael", "Grade 3"], ["Stephen", "Grade 4"]]
students_hash = students.inject({}) do |result, item|
  result[item.first] = item.last
  result
end

p students_hash

输出:

{"John"=>"Grade 2", "Michael"=>"Grade 3", "Stephen"=>"Grade 4"}

上面的示例将嵌套数组转换为键值哈希,使用每个数组项的第一个元素作为键,第二个元素作为值。

这里的初始累加器值是一个空哈希 {}

在 Ruby 中使用 Inject 方法过滤数组

示例代码:

numbers = [1, 2, 3, 4, 5, 6, 7]
even_numbers = numbers.inject([]) do |result, element|
  result << element if element.even?
  result
end

p even_numbers

输出:

[2, 4, 6]

上面的示例构建了一个新数组并用 numbers 数组中的偶数填充它。

这里的初始值是一个空数组 []

注意
inject 方法的别名是 reduce 方法,两者可以互换使用。