在Ruby中以相反的顺序遍历时修改数组中的特定项

时间:2012-09-03 11:02:56

标签: ruby arrays reverse traversal

有没有办法在Ruby中以相反的顺序遍历它时修改特定的数组元素(基于某些条件)?

更清楚地说,

问题是将[1,2,3,4,5]中的偶数替换为x

输出应该是[1,x,3,x,5](相同的数组),但是替换应该从右到左发生..从5到1。

提前致谢!

这适用:(arr.length -1).downto(0){| x |用arr [x]}

做一些事情

3 个答案:

答案 0 :(得分:3)

p [1,2,3,4,5].reverse_each.map{|e| e.odd? ? e : e/2} #[5, 2, 3, 1, 1]

答案 1 :(得分:1)

我理解你想以相反的顺序遍历,而不是让输出也反转。也许这个:

xs = [1, 2, 3]
xs.reverse_each.with_index { |x, idx| xs[xs.size-1-idx] = x.to_s if x == 2 }
xs #=> [1, "2", 3]

答案 2 :(得分:0)

我很欣赏并喜欢Ruby的人性化语法,但您可能需要考虑更详细的选项,例如:

ary = [1,2,3,4,5]
i = ary.count - 1
while i >= 0 do
    ary[i] = "x" if ary[i] % 2 == 0
    i -= 1
end
puts ary.join(",")