我正在快速阅读数组和一些基本方法。阅读末尾的一个练习题给了我一个数组,并要求获得以下输出结果
=> [10, 8, 4, 2]
这是数组:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
解决方案:1
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers = numbers.select { |number| number.even? }.reverse
numbers.delete(6)
p numbers
但是我想问的是,为什么上面的代码会返回正确的输出,而下面的代码却不会?
解决方案:2
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers = numbers.select { |number| number.even? }
numbers.delete(6)
numbers.reverse
p numbers
我知道这不是最流利的方法,但是当我尝试解决这些问题时,我更容易将所有内容分开然后清理代码。
我希望它从它们中删除偶数删除6,然后打印反转的数组。
相反,它拉出偶数,删除6,然后打印偶数。完全跳过.reverse
答案 0 :(得分:2)
正如max所说,.reverse
不会更改数组。试试,代替:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers = numbers.select { |number| number.even? }
numbers.delete(6)
numbers.reverse!
p numbers
=> [10, 8, 4, 2]
答案 1 :(得分:0)
正如其他评论者所提到的,.reverse
不会更改数组。
您要么必须声明numbers.reverse
作为新变量(即reversed_numbers = numbers.reverse
),要么使用numbers.reverse!
(如jvillian所示)在调用时更改数字变量本身的值。
在两者之间,后一种方法更合适。
希望这对您有帮助!