Groovy 2d数组

时间:2014-04-10 11:17:19

标签: groovy multidimensional-array

我有3个数组,l1[,,,,], l2[,,,,] and l3[,,,,]。每个都有5个字符。

e.g. l1["A","B","C","D","E"]

2d阵列由这些

组成
screen = [l1[],l2[],l3[]]

所以它看起来如此:

screen = [[,,,,],[,,,,],[,,,,]]

如何迭代这个数组?

我打电话给screen[5]吗?还是screen[l1[5]]

我可以:

for (i in 1..15){

 println screen[i]
}

请帮助!!!

如何迭代数组并调用不同的部分,例如每个子数组的1st element

由于

1 个答案:

答案 0 :(得分:13)

所以,给定:

List l1 = ['A', 'B', 'C', 'D', 'E']
List l2 = ['a', 'b', 'c', 'd', 'e']
List l3 = ['1', '2', '3', '4', '5']

List screen = [ l1, l2, l3 ]

要迭代所有元素,您可以这样做:

3.times { y ->
    5.times { x ->
        println screen[ y ][ x ]  
    }
}

或者,您可以使用modintdiv来计算x和y位置:

15.times { p ->
    def x = p % 5
    def y = p.intdiv( 5 )
    println screen[ y ][ x ]
}

或者,如果您想要每个子列表中的第一个元素,您可以执行以下操作:

println screen*.head()

或者,假设您想要每个子列表中的第3个元素:

println screen*.getAt( 2 )

或者,您可以将所有项目放入一维列表中:

def inlineScreen = [ *l1, *l2, *l3 ]

然后通过以下方式访问:

15.times { p ->
    println inlineScreen[ p ]
}

或:

def x = 1, y = 1
println inlineScreen[ x + y * 5 ]

或者,如果您总是希望将元素组合在一起很重要(例如,您总是希望将所有数组中的第二个元素组合在一起),那么您可以这样做:

// groupedScreen == [['A', 'a', '1'], ['B', 'b', '2'], ['C', 'c', '3'], ['D', 'd', '4'], ['E', 'e', '5']]
def groupedScreen = [ l1, l2, l3 ].transpose()

然后,要获得第3个元素,您可以这样做:

groupedScreen[ 2 ]