Скажем, у меня есть Array[Int]
типа
val array = Array( 1, 2, 3 )
Теперь я хочу добавить элемент к массиву, скажем, значение 4
, как в следующем примере:
val array2 = array + 4 // will not compile
Я, конечно, могу использовать System.arraycopy()
и сделать это самостоятельно, но для этого должна быть библиотечная функция Scala, которую я просто не смог найти. Спасибо за любые подсказки!
Примечания:
Я знаю, что могу добавить еще один массив элементов, как в следующей строке, но это кажется слишком округлым:
val array2b = array ++ Array( 4 ) // это работает
Я знаю о преимуществах и недостатках List vs Array, и здесь я по разным причинам конкретно заинтересован в расширении Array.
Спасибо за ответы, указывающие на метод оператора :+
. Это то, что я искал. К сожалению, он работает медленнее, чем пользовательская реализация метода 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