Ruby:这两个数组的区别是什么?

时间:2010-07-17 18:53:05

标签: ruby

这里对语法感到困惑,但有什么区别:

foo[x][y] 

foo[x, y]

3 个答案:

答案 0 :(得分:8)

  • foo[x, n]从第x个元素开始从foo返回n个元素。
  • foo[x][y]foo中找到第x个元素并返回其第y个元素。

以下是一个示例:

> foo = [[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14]]
=> [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14]]
> foo[1,2]
=> [[3, 4, 5], [6, 7, 8]]
> foo[1][2]
=> 5

答案 1 :(得分:3)

其他解释很好,但这里有不同的看法。

foo[x]foo.slice(x)的语法糖。同样,foo[x,y]相当于foo.slice(x,y)。如果你看the rubydocs,你就会看到

array.slice(index)返回index的值,

带有两个参数的

array.slice(start,length)会返回一个从start开始并且有length个元素的子数组。

因此,您可以将foo[x][y]视为foo.slice(x).slice(y)foo数组的位置x处的数组中获取y th 元素,显然不同于foo[x,y]foo.slice(x,y),它从foo本身提取值的子数组。

答案 2 :(得分:1)

第一种语法允许您索引到2D数组(即数组数组),例如

irb(main):035:0> l = [[1,2,3],[4,5,6],[7,8,9]]
=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
irb(main):036:0> l[0]
=> [1, 2, 3]
irb(main):037:0> l[0][0]
=> 1

第二个返回从位置x开始的数组中的y个元素,例如

irb(main):038:0> a = [1,2,3,4,5,6,7,8]
=> [1, 2, 3, 4, 5, 6, 7, 8]
irb(main):039:0> a[2,3]
=> [3, 4, 5]