Groovy获取某个索引下的列表中的所有元素

Dav*_*sry 0 groovy list elements

我想收集特定索引下特定数组列表中的所有元素.假设我有这个清单:

def names = ["David", "Arthur", "Tommy", "Jacob"]
Run Code Online (Sandbox Code Playgroud)

我想打印索引2下的所有名字,在这种情况下,将打印"大卫,亚瑟"

现在我可以很容易地使用for循环,甚至是groovy eachWithIndex().问题是我不想遍历所有元素,因为这样做效率不高.而不是那样,我想要跑到特定点.

在groovy中有没有这样做的方法,因为我找不到一个.

提前致谢!

inj*_*eer 5

给定列表

def names = ["David", "Arthur", "Tommy", "Jacob"]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下任一选项:

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 )
Run Code Online (Sandbox Code Playgroud)

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


bdk*_*her 5

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

def names = ["David", "Arthur", "Tommy", "Jacob"]
assert ['David', 'Arthur'] == names.take(2)
Run Code Online (Sandbox Code Playgroud)


Cav*_*vaz 4

使用范围

\n\n
\xe2\x80\x8bdef names = ["David", "Arthur", "Tommy", "Jacob"]\ndef idx = 2\n\ndef sublist = names[0..idx-1]\n\nsublist.each { n ->\n    println n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用更多语法糖:

\n\n
names[0..<idx]\n
Run Code Online (Sandbox Code Playgroud)\n