2016-10-19 3 views
0

Я хочу собрать все элементы в определенном списке массивов под определенным индексом. Скажем, у меня есть этот список:Groovy получить все элементы в списке под определенным индексом

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

Я хочу, чтобы напечатать все имена под индексом 2, который в данном случае будет печатать «Дэвид, Артур»

Теперь я могу использовать для цикла довольно легко с этим или даже groovy's eachWithIndex(). Проблема в том, что я не хочу запускать все элементы, потому что это неэффективно. Вместо этого я хочу работать до определенной точки.

Есть ли какой-либо метод в groovy, который делает это, потому что я его не нашел.

Заранее благодарен!

+0

В таком случае вы можете использовать обычный цикл 'for' с индексом' int' вместо чего-то * 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) 

Обратите внимание, что каждый из этих методов создает новый экземпляр списка, поэтому, если соображения памяти важны, имеет смысл пропустить элементы, используя, например, eachWithIndex() или

4

Поскольку вы начинаете с индекса 0, метод take, вероятно, является самым простым подходом.

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

 Смежные вопросы

  • Нет связанных вопросов^_^