Array[Int]
Beğendiğimi söyle
val array = Array( 1, 2, 3 )
Şimdi 4
, aşağıdaki örnekte olduğu gibi , diziye bir öğe eklemek istiyorum, değeri söyleyin :
val array2 = array + 4 // will not compile
Elbette System.arraycopy()
bunu kendi başıma kullanabilir ve yapabilirim, ancak bunun için bulamadığım bir Scala kütüphanesi işlevi olmalı. Herhangi bir işaret için teşekkürler!
Notlar:
Aşağıdaki satırdaki gibi başka bir öğe dizisi ekleyebileceğimin farkındayım, ancak bu çok yuvarlak görünüyor:
val array2b = array ++ Array( 4 ) // this works
List vs Array'in avantajlarının ve dezavantajlarının farkındayım ve burada, çeşitli nedenlerle özellikle bir Array'i genişletmekle ilgileniyorum.
Düzenle 1
:+
Operatör yöntemine işaret eden cevaplar için teşekkürler . Aradığım şey buydu. Ne yazık ki, özel bir append () yöntemi uygulamasından oldukça yavaştır arraycopy
- yaklaşık iki ila üç kat daha yavaştır. Uygulamaya bakıldığında SeqLike[]
, bir oluşturucu oluşturulur, daha sonra dizi buna eklenir, ardından ekleme oluşturucu aracılığıyla yapılır, ardından oluşturucu oluşturulur. Diziler için iyi bir uygulama değil. On döngüden en hızlı zamana bakarak iki yöntemi karşılaştırarak hızlı bir kıyaslama yaptım. Bazı sınıfların 8 öğeli bir dizi örneğine tek öğeli bir ekin 10 milyon tekrarı yapmak , kullanılan basit bir yöntemle Foo
3,1 saniye :+
ve 1,7 saniye sürerappend()
System.arraycopy();
8 öğeli Long dizilerinde 10 milyon tek öğeli ekleme tekrarı :+
yapmak, basit append()
yöntemle 2,1 saniye ve 0,78 saniye sürer . Bunun kütüphanede özel bir uygulama ile düzeltilip düzeltilemeyeceğini merak ediyor Array
musunuz?
Düzenle 2
Değeri ne olursa olsun, bir talepte bulundum: https://issues.scala-lang.org/browse/SI-5017
System.arraycopy(...)
yerineArray.copy(...)
ArrayBuffer
dönüştürülen bir kullanarak kıyaslamanızı tekrar çalıştırabilir misiniz ? toArray
ArrayBuffer
ve+=
yöntemi? Bu size amortize edilmiş O (1) eki verecektir.