2014-04-10 219 views
4

我有3個陣列,l1[,,,,], l2[,,,,] and l3[,,,,]。其中每個都有5個字符。Groovy 2d陣列

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

二維陣列由這些

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

,因此它看起來像這樣:

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

如何可以通過查看此數組?

我打電話給screen[5]?或screen[l1[5]]

可我:

for (i in 1..15){ 

println screen[i] 
} 

請幫助!

如何迭代數組並調用不同的部分,例如:每個子陣列的1st element

感謝

回答

9

因此,考慮到:

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

或者說你想從每個子列表中的第三個元素:

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

然後,爲了獲得第三的元素,你可以做:

groupedScreen[ 2 ]