Dav*_*sry 0 groovy list elements
我想收集特定索引下特定数组列表中的所有元素.假设我有这个清单:
def names = ["David", "Arthur", "Tommy", "Jacob"]
Run Code Online (Sandbox Code Playgroud)
我想打印索引2下的所有名字,在这种情况下,将打印"大卫,亚瑟"
现在我可以很容易地使用for循环,甚至是groovy eachWithIndex().问题是我不想遍历所有元素,因为这样做效率不高.而不是那样,我想要跑到特定点.
在groovy中有没有这样做的方法,因为我找不到一个.
提前致谢!
给定列表
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 实例,因此如果内存考虑因素很重要,则使用例如方法或类似方法跳过元素是有意义的
由于您从索引0开始,该take方法可能是最简单的方法.
def names = ["David", "Arthur", "Tommy", "Jacob"]
assert ['David', 'Arthur'] == names.take(2)
Run Code Online (Sandbox Code Playgroud)
使用范围:
\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}\nRun Code Online (Sandbox Code Playgroud)\n\n使用更多语法糖:
\n\nnames[0..<idx]\nRun Code Online (Sandbox Code Playgroud)\n