在 Ruby 中使用索引映射数组

Nurudeen Ibrahim 2023年1月30日
  1. 在 Ruby 中结合 mapeach_with_index 方法
  2. 在 Ruby 中结合 mapwith_index 方法
  3. map 与 Ruby 范围一起使用
在 Ruby 中使用索引映射数组

map 方法在 Ruby 中非常方便,当你需要将一个数组转换为另一个数组时,它会派上用场。例如,下面的代码使用 map 将小写字母数组转换为大写字母数组。

示例代码:

small_letters = ['a', 'b', 'c', 'd']
capital_letters = small_letters.map { |l| l.capitalize }
puts capital_letters

输出:

["A", "B", "C", "D"]

在上面的示例中,假设我们要映射并获取数组中每个字母的相应索引。我们如何做到这一点?下面列出了实现这一目标的不同方法。

在 Ruby 中结合 mapeach_with_index 方法

each_with_index 是一个 Ruby 可枚举的方法。

它执行名称所指示的操作。它遍历数组或散列并提取每个元素及其各自的索引。在 each_with_index 的结果上调用 map 可以让我们访问索引。

这里each_with_index 的官方文档以获得更多解释。

示例代码:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.each_with_index.map { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

输出:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

在 Ruby 中结合 mapwith_index 方法

with_index 类似于 each_with_index 但略有不同。

each_with_index 不同,with_index 不能直接在数组上调用。数组需要首先显式转换为 Enumerator。

由于 map 自动处理转换,执行顺序在这里很重要,在调用 .with_index 之前调用 .map

示例代码:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index { |l, i| [i + 1, l.capitalize] }
puts numbered_capital_letters

输出:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

还值得一提的是,with_index 接受一个参数,即索引的偏移量,索引应该从哪里开始。我们可以使用该参数,而不必在 {} 块内执行 i + 1

示例代码:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = small_letters.map.with_index(1) { |l, i| [i, l.capitalize] }
puts numbered_capital_letters

输出:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

这里with_index 的官方文档以获得更多解释。

map 与 Ruby 范围一起使用

Ruby 范围是一组具有开始和结束的值。

例如,1..101...11 是一个 Range,表示从 110 的一组值。我们可以将它与 map 方法一起使用,以实现与上面示例中相同的结果。

示例代码:

small_letters = ['a', 'b', 'c', 'd']
numbered_capital_letters = (0...small_letters.length).map { |i| [i + 1, small_letters[i].capitalize]  }
puts numbered_capital_letters

输出:

[[1, "A"], [2, "B"], [3, "C"], [4, "D"]]

相关文章 - Ruby Array

相关文章 - Ruby Map