2017-02-27 91 views
-3

所以我有这个函数。无法将数组传递给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],但我一直得到相同的答案

+2

你是怎么想到的答案是什么? –

+2

我们不知道输出。根据您的代码,此输出看起来非常合理。你想做什么/得到什么? – ndn

回答

0

我不完全确定你的预期输出是什么。

但是您的误差来自于以下事实中红宝石该阵列的索引是基于零的,即,它们从0开始。因此:

  • 尽管有6个元素的阵列,其最后一个元素的索引为5 。
  • 这也意味着当你开始迭代你的数组并且索引值为1时,你将从第二个元素开始。

  • 在另一个说明中,用1...l定义了一个独占范围,即从1到l的整数范围,不包括l。如果你想包括L,则需要使用1..l

了一个quickfix你的代码是:

for i in 0..l do 
puts array[i] 
end 

但是,要实现相同的输出更惯用的方法是:

array.each {|e| puts e} 

而且

l = array.index(array[-1]) 

看起来有点复杂。为什么不简单?

l = array.length 
+0

我错了,我错误索引是长度.....我想打印的长度,所以array.length做了我的工作 – 0sfh

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]} 
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 

虽然如其他人所说,有更简单的方法来达到同样的输出。

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]) 
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)