这里对语法感到困惑,但有什么区别:
foo[x][y]
和
foo[x, y]
答案 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]