我正在尝试颠倒这个数组,首先让数组的末尾成为前半部分。为什么我的输出会跳过将 9 放入数组 [0] 中?我有 array[0] = tem[9-0-1] 所以 array[0] = temp[8]?这不是真的吗?
def sameArray(array)
temp = array
for i in array[0]..(((array.length)/2).floor)
array[i] = temp[array.length - i - 1]
##puts array[i]
end
end
sameArray([1,2,3,4,5,6,7,8,9])
# array[0] => array[8]
#array[1] => array[7]
#array[2] => array[6]
#array[3] => array[5]
最佳答案
你的程序有几个问题:
- 你并没有真正交换索引
i
的值和array.length - i - 1
,因此,数组没有完全反转 - 您的方法不返回更新后的数组,而是返回
for
的结果循环这是范围[1..4]
. - 你的
for
循环错误地使用了array[0]
作为范围内的第一个值,而它应该只是0
. -
temp
不是array
的真正副本, 它只是对array
的另一个引用,因此,最终将修改array
如果使用temp
完成任何更改.
基于以上观察,这里有一个更新的方法:
def sameArray(array)
temp = array.dup
for i in 0..(((temp.length)/2).floor)
temp[i], temp[-i-1] = temp[-i-1], temp[i]
end
return temp
end
请注意 temp.length - i - 1
可以写成 -i-1
, 与 -1
相同索引表示数组的最后一个元素。
通过使用一些惯用的 Ruby,我们可以摆脱临时变量 temp
并使用 each
代替 for
环形。这是一个可以被认为更符合 Ruby 习惯的代码版本。
def reverse(array)
array.dup.tap do |a|
(0..a.length/2).each do |i|
a[i], a[-i-1] = a[-i-1], a[i]
end
end
end
关于ruby - 反转原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38055557/