Scala: как лучше всего добавить элемент в массив?
Скажи у меня естьArray[Int]
любить
val array = Array( 1, 2, 3 )
Теперь я хотел бы добавить элемент в массив, скажем, значение4
, как в следующем примере:
val array2 = array + 4 // will not compile
Я могу конечно использоватьSystem.arraycopy()
и делаю это самостоятельно, но для этого должна быть библиотечная функция Scala, которую я просто не смог найти. Спасибо за любые указатели!
Примечания:
Я знаю, что могу добавить еще один массив элементов, как показано в следующей строке, но это кажется слишком округлым:
val array2b = array ++ Array( 4 ) // this works
Я знаю о преимуществах и недостатках List vs Array, и здесь я по разным причинам особенно заинтересован в расширении Array.
Редактировать 1Спасибо за ответы, указывающие на:+
операторный метод. Это то, что я искал. К сожалению, это немного медленнее, чем реализация пользовательского метода append (), использующегоarraycopy
- примерно в два-три раза медленнее. Глядя на реализацию вSeqLike[]
создается построитель, затем к нему добавляется массив, затем добавление выполняется через построитель, а затем создается построитель. Не очень хорошая реализация для массивов. Я сделал быстрый тест, сравнивая два метода, глядя на самое быстрое время из десяти циклов. Выполнение 10 миллионов повторений одного элемента добавляет к экземпляру массива из 8 элементов некоторого классаFoo
занимает 3,1 с:+
и 1,7 сек с простымappend()
метод, который используетSystem.arraycopy();
выполнение 10 миллионов повторений добавления одного элемента на массивах из 8 элементов Long занимает 2,1 с:+
и 0,78 сек с простымappend()
метод. Интересно, если это не может быть исправлено в библиотеке с пользовательской реализацией дляArray
?
На что это стоит, я подал заявку:https://issues.scala-lang.org/browse/SI-5017