2016-10-19 132 views
0

我想收集特定索引下特定数组列表中的所有元素。比方说,我有这样的名单:Groovy在特定索引下获取列表中的所有元素

def names = ["David", "Arthur", "Tommy", "Jacob"] 

我要打印2,该指数下的所有名字,在这种情况下,将打印“大卫亚瑟”

现在我可以用一个for循环很容易与那甚至groovy的eachWithIndex()。问题是我不想在所有元素上运行,因为这样做效率不高。而不是那个,我想跑直到一个特定的点。

是否有任何方法在groovy这样做,因为我没有找到一个。

在此先感谢!

+0

在这种情况下,你可能会考虑使用带'int'索引的普通'for'循环而不是* groovy *。 'for(int i = 0; i <2; i ++)...' –

回答

1

使用Ranges

​def names = ["David", "Arthur", "Tommy", "Jacob"] 
def idx = 2 

def sublist = names[0..idx-1] 

sublist.each { n -> 
    println n 
} 

使用更多的语法糖:

names[0..<idx] 
0

给出的列表

def names = ["David", "Arthur", "Tommy", "Jacob"] 

你可以使用任何下列选项:

assert [ "Tommy", "Jacob" ] == names[ 2..<4 ] 
assert [ "Tommy", "Jacob" ] == names[ 2..-1 ] 
assert [ "Tommy", "Jacob" ] == names.subList(2, 4) 
assert [ "Tommy", "Jacob" ] == names.drop(2) 

请注意,这些方法中的每一个都会创建一个新的List实例,因此,如果内存考虑因素非常重要,则可以使用例如跳过元素来跳过这些元素。 eachWithIndex()方法或类似

4

由于您从索引0开始,take方法可能是最简单的方法。

def names = ["David", "Arthur", "Tommy", "Jacob"] 
assert ['David', 'Arthur'] == names.take(2) 
相关问题