arrays - Scala:將元素追加到數組的最佳方式是什麼?



append (2)

假設我有一個Array[Int]類似的

val array = Array( 1, 2, 3 )

現在我想在數組中追加一個元素,例如值4 ,如下例所示:

val array2 = array + 4     // will not compile

我當然可以使用System.arraycopy()並自己完成此操作,但是必須有一個Scala庫函數用於此目的,我根本無法找到它。 感謝任何指針!

筆記:

  1. 我知道我可以追加另一個元素數組,如下面的代碼行,但是看起來太圓了:

    val array2b = array ++ Array( 4 )     // this works
    
  2. 我意識到List vs Array的優點和缺點,在這裡我出於各種原因對擴展數組有特別的興趣。

編輯1

感謝指向:+運算符方法的答案。 這是我正在尋找的。 不幸的是,它比使用arraycopy的自定義append()方法實現要慢 - 約慢兩到三倍。 查看SeqLike[]中的實現,創建一個構建器,然後將數組添加到其中,然後通過構建器完成附加,然後構建器被呈現。 不是一個好的數組實現。 我做了一個比較兩種方法的快速基準,查看了十個週期中最快的時間。 對一個Foo類的8元素數組實例添加1000萬次重複的單個項目需要3.1秒的時間:+和1.7秒,使用System.arraycopy();的簡單append()方法System.arraycopy(); 使用簡單的append()方法在Long元素的8元素數組上執行1000萬個單項追加重複操作,時間為2.1秒, :+和0.78秒。 不知道這是不是可以通過Array的自定義實現在庫中修復?

編輯2

對於它的價值,我提交了一張票: https://issues.scala-lang.org/browse/SI-5017 : https://issues.scala-lang.org/browse/SI-5017

https://ffff65535.com


您可以使用:+將元素附加到數組,並將+:添加到數組中:

0 +: array :+ 4

應該產生:

res3: Array[Int] = Array(0, 1, 2, 3, 4)

這與Seq其他實現一樣。


最簡單的可能是:

Array(1, 2, 3) :+ 4

實際上,Array可以在WrappedArray中被隱式轉換





append