Я пытаюсь объединить N списков, суммируя каждый отдельный элемент и выводя один окончательный список с результатом. Вот визуализация:
List 1: { 1, 2, 3 }
List 2: { 4, 5, 6 }
List 3: { 7, 8, 9 }
...
List N: { X, X, X }
Если мы скомбинируем первые три, результат будет:
List Result: { 12, 15, 18 }
Я хотел бы продолжить суммирование элементов для каждого индекса,чисто, встроенный, с оптимальной производительностью.
Я знаю, что здесь поможет zip-оператор (достаточно просто сделать list1.zip (list2) и добавить pair.first и pair.second), но это не такя не могу обрабатывать более одного списка.
Я изучил операции сбора Kotlin, чтобы попытаться найти решение - я изучил использование сложения, уменьшения, flatMap, zip, groupBy и, возможно, преобразования списка в последовательностьвоспользоваться аспектом каждого элемента. Но я не могу найти чистый способ объединить эти операции для получения удовлетворительного результата.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Теперь у меня есть метод расширения, называемый padStart (скрытый для краткости). ), чтобы убедиться, что все мои вложенные списки имеют одинаковую длину, а затем я неуклюже создаю временный список, к которому я добавляю значения при итерации:
myNestedLists
.run {
// Calculate largest list size of 'n' lists
val largestSize = map { it.size }.max() ?: 0
// Pad lists with zeroes if size < largestSize
map { it.padStart(largestSize, 0.0) }
}
.run {
// Create temporary list, add all of the first elements to it
val combinedList: MutableList<Double> = mutableListOf()
combinedList.addAll(this.first())
// Now, for each nested list, add each individual element with the combined value at combinedList[index]
drop(1).forEach {
it.forEachIndexed { index, value ->
combinedList[index] += value
}
}
// Return the final result
combinedList
}
Это решение работает, но сложночитать и не очень чисто. Я ищу лучший!