it-swarm-id.com

Menambahkan elemen ke akhir daftar di Scala

Kedengarannya seperti pertanyaan bodoh, tetapi yang saya temukan di internet hanyalah sampah. Saya tidak bisa menambahkan elemen tipe T ke dalam daftar List[T]. Saya mencoba dengan myList ::= myElement tetapi tampaknya ini menciptakan objek aneh dan mengakses myList.last selalu mengembalikan elemen pertama yang dimasukkan ke dalam daftar.

199
Masiar
List(1,2,3) :+ 4

Results in List[Int] = List(1, 2, 3, 4)

Perhatikan bahwa operasi ini memiliki kompleksitas O (n). Jika Anda sering membutuhkan operasi ini, atau untuk daftar panjang, pertimbangkan untuk menggunakan tipe data lain (mis. ListBuffer).

361
Landei

Itu karena Anda seharusnya tidak melakukannya (setidaknya dengan daftar yang tidak berubah). Jika Anda benar-benar perlu menambahkan elemen pada akhir struktur data dan struktur data ini benar-benar harus menjadi daftar dan daftar ini benar-benar harus tidak berubah kemudian lakukan hal berikut:

(4 :: List(1,2,3).reverse).reverse

atau itu:

List(1,2,3) ::: List(4)
65
agilesteel

Daftar dalam Scala tidak dirancang untuk dimodifikasi. Bahkan, Anda tidak dapat menambahkan elemen ke Scala List ; ini merupakan struktur data yang tidak dapat diubah , seperti string Java. Apa yang sebenarnya Anda lakukan ketika "menambahkan elemen ke daftar" di Scala adalah membuat Daftar baru dari Daftar yang ada . (Sumber)

Daripada menggunakan daftar untuk kasus penggunaan seperti itu, saya sarankan untuk menggunakan ArrayBuffer atau ListBuffer . Struktur data tersebut dirancang untuk menambahkan elemen baru.

Akhirnya, setelah semua operasi Anda selesai, buffer kemudian dapat dikonversi menjadi daftar. Lihat contoh REPL berikut:

scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer

scala> var fruits = new ListBuffer[String]()
fruits: scala.collection.mutable.ListBuffer[String] = ListBuffer()

scala> fruits += "Apple"
res0: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple)

scala> fruits += "Banana"
res1: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana)

scala> fruits += "Orange"
res2: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana, Orange)

scala> val fruitsList = fruits.toList
fruitsList: List[String] = List(Apple, Banana, Orange)
22
Markus Weninger

Ini mirip dengan salah satu jawaban tetapi dengan cara yang berbeda:

scala> val x=List(1,2,3)
x: List[Int] = List(1, 2, 3)

scala> val y=x:::4::Nil
y: List[Int] = List(1, 2, 3, 4)
3
Venkat

Kami dapat menambahkan atau menambahkan dua daftar atau daftar & larik
(Tambahkan:

var l = List(1,2,3)    
l=l:+4 
Result : 1 2 3 4  
var ar = Array(4,5,6)    
for(x<-ar)    
{ l=l:+x}  
  l.foreach(println)

Result:1 2 3 4 5 6

Prepending:

var l = List[Int]()  
   for(x<-ar)  
    { l=x::l } //prepending    
     l.foreach(println)   

Result:6 5 4 1 2 3
1