我试图扭转这个数组,并开始让数组的一半结束成为上半部分。我的输出是否正在跳过将9放入数组[0]?我有数组[0] = tem [9-0-1]所以数组[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]
答案 0 :(得分:3)
您的计划中存在一些问题:
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
答案 1 :(得分:2)
def sameArray(array)
len = array.size
i = 0
j = len - 1
while i < j do
temp = array[i]
array[i] = array[j]
array[j] = temp
i = i+1
j = j-1
end
end
你可以用更简单的方式做到这一点
def sameArray(array)
array.reverse
end
答案 2 :(得分:0)
您只需一种方法即可解决此问题:Array#reverse!
Cache-Control:no-cache
Connection:close
Content-Type:application/json
Response content:
array(7) {
["product_id"]=>
string(1) "5"
["paidprice"]=>
string(2) "85"
["condition"]=>
string(8) "Sehr Gut"
["ovp1"]=>
string(1) "0"
["ovp2"]=>
string(1) "0"
["ovp3"]=>
string(1) "0"
["ovp4"]=>
string(1) "0"
}
{"full_price":"85","updated_at":"2016-06-27 14:01:55","created_at":"2016-06-27 14:01:55","id":73,"created_by_id":1,"customer_id":1}
答案 3 :(得分:0)
根据您的方式,代码如下工作
def sameArray(array)
temp = array
for i in 0...array.length/2
t = array[i]
array[i] = temp[array.length - i - 1]
temp[array.length - i - 1] = t
##puts array[i]
end
end
sameArray([1,2,3,4,5,6,7,8,9])