在 Ruby 中使用索引映射数组
Nurudeen Ibrahim
2023年1月30日
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 中结合 map
和 each_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 中结合 map
和 with_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..10
或 1...11
是一个 Range,表示从 1
到 10
的一组值。我们可以将它与 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 中 each_with_index 和 each.with_index 的区别
- 遍历 Ruby 数组
- 删除 Ruby 中的数组元素
- 在 Ruby 数组中获取最大值和最小值
- 在 Ruby 中对一个数组求和
- 在 Ruby 中过滤数组