#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()
.