无法将数组传递给Ruby中的方法

时间:2017-02-27 11:36:33

标签: arrays ruby

所以我有这个功能。

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]但我一直得到相同的答案

5 个答案:

答案 0 :(得分:0)

我不确定你的预期输出是多少。

但是你的错误来自于ruby中的数组索引是从零开始的事实,即它们从0开始。因此:

  • 尽管你的数组有6个元素,但它的最后一个元素的索引是5。
  • 这也意味着当你开始在索引值为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)