Скажем, у меня есть 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
?
Edit 2
Для чего это стоит, я подал заявку: https://issues.scala-lang.org/browse/SI-5017