所以我有这个功能。
array = Array.new
def put_array(array)
l = array.index(array[-1])
puts l
for i in 0...l do
puts array[i]
end
end
put_array([1, 2, 3, 4, 5, 6])
输出是打印数组,但我一直得到这个结果.......
5
1
2
3
4
5
错误 ::索引输出为5,而预期输出应为6.我已经尝试了rindex,array.last而不是数组[-1]但我一直得到相同的答案
答案 0 :(得分:0)
我不确定你的预期输出是多少。
但是你的错误来自于ruby中的数组索引是从零开始的事实,即它们从0开始。因此:
这也意味着当你开始在索引值为1的情况下迭代数组时,你将从第二个元素开始。
另一方面,使用SELECT MIN(val), MAX(val) FROM (
SELECT a val FROM Table
UNION
SELECT b FROM Table
) d
定义一个排他范围,即1到1之间的整数范围,不包括1...l
。如果要包含l,则需要使用l
您的代码的快速修补程序将是:
1..l
但实现相同输出的更惯用的方法是:
for i in 0..l do
puts array[i]
end
另外
array.each {|e| puts e}
看起来有点费解。为什么不简单?
l = array.index(array[-1])
答案 1 :(得分:0)
如果您只是puts
数组,它会在新行中打印数组的每个元素:
array = [1, 2, 3, 4, 5, 6]
puts array
#=> Output:
1
2
3
4
5
6
def put_array(array)
puts array
end
> put_array(array)
如果您想在索引基础上执行:
> array.each_with_index {|e,i| puts array[i]}
答案 2 :(得分:0)
我认为你感到困惑,因为0...5
输出数字范围0,1,2,3,4而不是0,1,2,3,4,5。您需要在..
...
而不是for i in
def put_array(array)
l = array.index(array[-1])
puts l
for i in 0..l do
puts array[i]
end
end
put_array([1, 2, 3, 4, 5, 6])
那将输出:
5
1
2
3
4
5
6
虽然正如其他人所说,但是有更简单的方法来实现相同的输出。
答案 3 :(得分:0)
我不确定您是否正在尝试打印数组,如果是这样的话......您的代码可以通过这种方式进行修改
array = Array.new
def put_array(array)
l = array.length
for i in 0...l do
puts array[i]
end
end
put_array([1, 2, 3, 4, 5, 6])
答案 4 :(得分:0)
index为您提供给定对象的索引,因此在您的情况下,index(-1)
将提供nil
,因为该数组不包含-1
。
相反,你想要这样做:
array.index(6) # => 5 (6 is at index 5 of array)
array[5] # => 6 (5th item in array is 6)
array[-1] # => 6 (-1th (aka last) item in the array is 6)
array.last # => 6 (last item in array is 6)