arrays - Scala:將元素追加到數組的最佳方式是什麼?
append (2)
假設我有一個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的優點和缺點,在這裡我出於各種原因對擴展數組有特別的興趣。
編輯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中被隱式轉換