gpt4 book ai didi

ruby - 反转原始数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:52 25 4
gpt4 key购买 nike

我正在尝试颠倒这个数组,首先让数组的末尾成为前半部分。为什么我的输出会跳过将 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]

最佳答案

你的程序有几个问题:

  1. 你并没有真正交换索引 i 的值和 array.length - i - 1 ,因此,数组没有完全反转
  2. 您的方法不返回更新后的数组,而是返回 for 的结果循环这是范围 [1..4] .
  3. 你的 for循环错误地使用了 array[0]作为范围内的第一个值,而它应该只是 0 .
  4. 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com