Поскольку a является bufferArray, поэтому мы можем изменять значения массива a.
Строка 3:
Строка 3 заполняется, или вы можете сказать, обновляя значение positionToKeep в a.
a(j) = positionToKeep(j)
// which is running like this
// a(0) = positionToKeep(0)
// a(1) = positionToKeep(1) .... and so on
Теперь, что произойдет после заполнения всех значений positionToKeep в a, может случиться, что некоторые старые значения останутся нетронутыми.Четвертая строка удаляет или удаляет эти элементы.В случае, когда у нас есть все положительные значения в массиве, четвертая строка бесполезна, но когда длина a больше, чем positionToKeep, нам нужна строка 4.
Строка 4: рассмотрим сценарий
val a = Array(1, 2, 3, 4, 5, 6)
Тогда у нашего positionToKeep будет весь элемент, а длина обоих массивов будет равна.
val positionToKeep = Array(1, 2, 3, 4, 5, 6)
В этом случае в строке четыре trimEnd (0), потому что длина a и positionToKeep равны.
val a = Array( 1, 2, 3, 4, -5, -6, 8, 9, -3)
В этом случае у нас будет Array(1,2,3,4,8,9)
в positionToKeep
В строке 3 мы обновиммассив a и после обновления до четвертой строки так будет выглядеть наш массив a.Array(1,2,3,4,8,9,8,9,-3)
, поскольку нам нужны значения только до длины 6, поскольку у нас есть только 6 положительных значений.Нам нужно отбросить последние 3 элемента, что делает для нас tripEnd.