第二个代码不返回第一个代码成功返回的内容的原因是什么



我正在快速阅读数组和一些基本方法。阅读结束时的练习问题之一给了我一个数组,并要求获得以下输出

=> [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所示(以更改调用时数字变量本身的值。

在两者之间,后一种方法更合适。

希望这有帮助!

最新更新