我正在快速阅读数组和一些基本方法。阅读结束时的练习问题之一给了我一个数组,并要求获得以下输出
=> [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
正如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]
正如其他评论者所提到的,.reverse
不会更改数组。
您要么必须将numbers.reverse
声明为新变量(即reversed_numbers = numbers.reverse
(,要么使用numbers.reverse!
(如JVillian所示(以更改调用时数字变量本身的值。
在两者之间,后一种方法更合适。
希望这有帮助!