Groovy — Получение первых элементов в многомерном массиве

#groovy

#groovy

Вопрос:

У меня есть отличный список списков, т.Е.

 list = [[2, 0, 1], [1, 5, 2], [1, 0, 3]]
  

Я хотел бы получить подмножество только из первых элементов каждого массива

 sublist = [2, 1, 1]
  

Я знаю, что могу выполнить цикл и просто получить первый элемент и добавить, но я пытаюсь избежать этого, поскольку у меня огромный массив значений. Я пытаюсь избежать этого решения

 def sublist = []
list.each {
  sublist.add(it[0])
}
  

Спасибо.

Ответ №1:

Более читаемая версия:

 list*.first()
  

Ответ №2:

Вы могли бы попробовать:

 list.collect { it[0] }
  

Хотя это все еще требует итерации (хотя и несколько скрытой). Однако, вероятно, что любое решение будет включать итерацию где-то в дальнейшем, независимо от того, написано ли оно вами или методом библиотеки / API, который вы вызываете.

Ответ №3:

Если вы беспокоитесь о копировании данных, лучшим подходом может быть создание пользовательского итератора, а не копирование данных в другой список. Это отличный подход, если вам нужно только один раз просмотреть вложенный список. Кроме того, если вы не переходите к концу подсписка, вы не потратили никаких усилий на элементы, которые вы никогда не обрабатывали. Например:

 bigList =  [[2, 0, 1], [1, 5, 2], [1, 0, 3]]

bigListIter = bigList.iterator()
firstOnlyIter = [
    hasNext: { -> bigListIter.hasNext() },
    next: { -> bigListIter.next().first() }
] as Iterator

for (it in firstOnlyIter) {
    println it
}
  

Вы всегда можете превратить итератор обратно в список с помощью Iterator.toList() .