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

时间:2019-08-01 00:36:56

标签: ruby

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

=> [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

2 个答案:

答案 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所示)在调用时更改数字变量本身的值。

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

希望这对您有帮助!