首页 > 解决方案 > 如何在数组 ruby​​ 中添加元素?

问题描述

我想在数组的元素中添加'n-'作为元素索引的数量n,然后将其反转为数组 ["Abricot du Laudot", "Black Caviar", "Brigadier Gerard", "Coup de Folie"] ,我需要它是 ["4-Brigadier Gerard!", "3-Coup de Folie!", "2-Black Caviar!", "1-Abricot du Laudot!"] 迄今为止我尝试过 的那样,race_array.map! { |horse| horse.prepend() }.reverse! 但可以找不到将数字索引放入前置函数或使用每种方法的方法

标签: ruby

解决方案


为了将索引注入到map块中,您需要调用将索引发送到块的枚举器方法。这里有几个选项:

race_array = ["Abricot du Laudot", "Black Caviar", "Brigadier Gerard", "Coup de Folie"]

# Use `each_with_index` before calling `map`
race_array.each_with_index.map{ |name, i| "#{i+1}-#{name}" }.reverse
# => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]

# Use `with_index` after calling `map`
race_array.map.with_index{ |name, i| "#{i+1}-#{name}" }.reverse
# => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]

# Similarly, you can call `with_index` with an offset:
race_array.map.with_index(1){ |name, i| "#{i}-#{name}" }.reverse
# => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]

有关更多信息,请参阅此问题

对于更“异国情调”的解决方案(尽管可读性较差),您可以将索引与数组的每个元素结合起来,然后加入结果:

(1..race_array.length).zip(race_array).map{|x| x.join('-')}.reverse

推荐阅读