Это еще один вопрос от Scala for the Impatient
который говоритЭффективно перемещающийся массив, соответствующий логическому состоянию?
Написать функцию lteqgt (значения: Array [Int], v: Int), который возвращает тройные содержащие отсчеты значений меньше, чем у, равна V, и больше, чем против.
как я сделал это
scala> def lteqgt(values: Array[Int], v: Int): (Int, Int, Int) = (values.count(_ < v), values.count(_ == v), values.count(_ > v))
lteqgt: (values: Array[Int], v: Int)(Int, Int, Int)
scala> lteqgt(Array(0,0,1,1,1,2,2), 1)
res47: (Int, Int, Int) = (2,3,2)
проблема?
Я перемещаю массив 3
раз, чтобы собрать подсчеты. Есть ли способ собирать значения в первый раз? идиоматический путь?
Это не может быть столь же эффективным, как кажется. Сравните [ваш код, переведенный в java] (https://gist.github.com/Aivean/2873001fec4507dce257) в [хвостик-рекурсивное решение] (https://gist.github.com/Aivean/7adecb7107ea1b164187). Я не тестировал его, но я думаю, что вызов функции для каждой итерации может быть менее эффективным. – Aivean
Вы, вероятно, хотели использовать цикл while. Scala не поддерживает java-стиль 'for' loop. Scala 'for' цикл компилируется в' foreach'/'map'. – Aivean
@Aivean Спасибо. Исправленный. – chi