Надеюсь, этот вопрос может понравиться любителям функционального программирования. Могу ли я попросить способ перевести следующий фрагмент кода на чистую функциональную реализацию в Scala с хорошим балансом между читабельностью и скоростью выполнения?Функциональная версия типичного вложенного цикла while
Описание: для каждого элемента в последовательности создается подпоследовательность, содержащая элементы, которые поступают после текущих элементов (включая себя) с расстоянием, меньшим заданного порогового значения. После того, как порог пересечен, не нужно обработать оставшиеся элементы
def getGroupsOfElements(input : Seq[Element]) : Seq[Seq[Element]] = {
val maxDistance = 10 // put any number you may
var outerSequence = Seq.empty[Seq[Element]]
for (index <- 0 until input.length) {
var anotherIndex = index + 1
var distance = input(index) - input(anotherIndex) // let assume a separate function for computing the distance
var innerSequence = Seq(input(index))
while (distance < maxDistance && anotherIndex < (input.length - 1)) {
innerSequence = innerSequence ++ Seq(input(anotherIndex))
anotherIndex = anotherIndex + 1
distance = input(index) - input(anotherIndex)
}
outerSequence = outerSequence ++ Seq(innerSequence)
}
outerSequence
}
«Лучший» довольно субъективен. По какому стандарту? Читаемость? Скорость? Использование памяти? – Carcigenicate
спасибо, хорошая точка! – BlueSky
Приведенный выше код будет вызывать исключение ArrayIndexOutOfBoundsException, когда индекс вводится.length-1. –