Cú pháp để thêm một phần tử vào scala.collection.mutable.Map là gì?
Đây là một số lần thử không thành công:
val map = scala.collection.mutable.Map
map("mykey") = "myval"
map += "mykey" -> "myval"
map.put("mykey","myval")
Cú pháp để thêm một phần tử vào scala.collection.mutable.Map là gì?
Đây là một số lần thử không thành công:
val map = scala.collection.mutable.Map
map("mykey") = "myval"
map += "mykey" -> "myval"
map.put("mykey","myval")
Câu trả lời:
Vấn đề là dòng đầu tiên của mã của bạn không như bạn mong đợi.
Bạn nên sử dụng:
val map = scala.collection.mutable.Map[A,B]()
Sau đó, bạn có nhiều lựa chọn thay thế tương đương để thêm các mục:
scala> val map = scala.collection.mutable.Map[String,String]()
map: scala.collection.mutable.Map[String,String] = Map()
scala> map("k1") = "v1"
scala> map
res1: scala.collection.mutable.Map[String,String] = Map((k1,v1))
scala> map += "k2" -> "v2"
res2: map.type = Map((k1,v1), (k2,v2))
scala> map.put("k3", "v3")
res3: Option[String] = None
scala> map
res4: scala.collection.mutable.Map[String,String] = Map((k3,v3), (k1,v1), (k2,v2))
Và bắt đầu Scala 2.13
:
scala> map.addOne("k4" -> "v4")
res5: map.type = HashMap(k1 -> v1, k2 -> v2, k3 -> v3, k4 -> v4)
new
dấu ngoặc trống là không cần thiết.
Như mọi khi, bạn nên đặt câu hỏi liệu bạn có thực sự cần một bản đồ có thể thay đổi được hay không.
Bản đồ bất biến rất dễ xây dựng:
val map = Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
Bản đồ có thể thay đổi không khác gì khi lần đầu tiên được xây dựng:
val map = collection.mutable.Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
map += "nextkey" -> "nextval"
Trong cả hai trường hợp này, suy luận sẽ được sử dụng để xác định các tham số kiểu chính xác cho cá thể Bản đồ.
Bạn cũng có thể giữ một bản đồ bất biến trong một var
, biến sau đó sẽ được cập nhật với một bản đồ bất biến mới mỗi khi bạn thực hiện "cập nhật"
var map = Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
map += "nextkey" -> "nextval"
Nếu bạn không có bất kỳ giá trị ban đầu nào, bạn có thể sử dụng Map.empty:
val map : Map[String, String] = Map.empty //immutable
val map = Map.empty[String,String] //immutable
val map = collection.mutable.Map.empty[String,String] //mutable
map ++ Seq("another1" -> "anotherVal1", "another2" -> "anotherVal2")
Khi bạn nói
val map = scala.collection.mutable.Map
bạn không tạo một phiên bản bản đồ, mà thay vào đó đặt bí danh cho loại Bản đồ.
map: collection.mutable.Map.type = scala.collection.mutable.Map$@fae93e
Thay vào đó, hãy thử những cách sau:
scala> val map = scala.collection.mutable.Map[String, Int]()
map: scala.collection.mutable.Map[String,Int] = Map()
scala> map("asdf") = 9
scala> map
res6: scala.collection.mutable.Map[String,Int] = Map((asdf,9))
Tạo một bản đồ bất biến mới:
scala> val m1 = Map("k0" -> "v0")
m1: scala.collection.immutable.Map[String,String] = Map(k0 -> v0)
Thêm một cặp khóa / giá trị mới vào bản đồ trên (và tạo một bản đồ mới, vì cả hai đều bất biến):
scala> val m2 = m1 + ("k1" -> "v1")
m2: scala.collection.immutable.Map[String,String] = Map(k0 -> v0, k1 -> v1)
Tạo một bản đồ có thể thay đổi mà không có giá trị ban đầu:
scala> var d= collection.mutable.Map[Any, Any]()
d: scala.collection.mutable.Map[Any,Any] = Map()
Tạo một bản đồ có thể thay đổi với các giá trị ban đầu:
scala> var d= collection.mutable.Map[Any, Any]("a"->3,1->234,2->"test")
d: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, a -> 3, 1 -> 234)
Cập nhật khóa-giá trị hiện có:
scala> d("a")= "ABC"
Thêm khóa-giá trị mới:
scala> d(100)= "new element"
Kiểm tra bản đồ đã cập nhật:
scala> d
res123: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, 100 -> new element, a -> ABC, 1 -> 234)
var map: Map [String, String] = Map ()
var map1 = map + ("red" -> "# FF0000")
println (map1)