Ở phần trước chúng ta đã tìm hiểu về List, Map và Set.Như các bạn thấy tất cả chúng đều là immutable nghĩa là khi khởi tạo xong nó không thể thay đổi được và để thay đổi collection bạn phải gán nó lại vào 1 collection mới.
Ví dụ năm ngoái tôi có 1 Map lưu tên và đặc điểm của những người yêu trước đây :
Ví dụ năm ngoái tôi có 1 Map lưu tên và đặc điểm của những người yêu trước đây :
scala> val nguoiYeuCu = Map("em Dung" -> "ngoan", "em Thao" -> "xinh")Năm nay tôi có người yêu mới và cần update lại danh sách này :
nguoiYeuCu: scala.collection.immutable.Map[String,String] = Map(em Dung -> ngoan, em Thao -> xinh)
scala> val nguoiYeuCu2016 = nguoiYeuCu + ("em Thuỷ" -> "rất hư")Điều này làm cho việc sử dụng dữ liệu trở lên an toàn hơn tuy nhiên cũng có rất nhiều trường hợp bạn cần đến mutable collections.
nguoiYeuCu2016: scala.collection.immutable.Map[String,String] = Map(em Dung -> ngoan, em Thao -> xinh, em Thuỷ -> rất hư)
Mutable Collections
Tạo trực tiếp từ thư viện của Scala :
Để tạo mutable collection bạn cần thư viện : collection.mutable
Để tạo mutable collection bạn cần thư viện : collection.mutable
Tương ứng với List,Map và Set ta có 3 thư viện sau :
Trong thế giới mutable Buffer rất hữu dụng để tạo ra mutable collection tuy nhiên chỉ có nó được dùng rộng rãi quá. Có 1 cách khác để bạn có thể sử dụng mutable collection an toàn hơn là sử dụng builder
Builder sẽ là 1 lựa chọn tốt khi bạn muốn tạo một mutable collection chỉ để sau đó tạo ra 1 immutable collection.
Ok,có lẽ hôm nay nên dừng lại ở đây và hôm sau ta sẽ cùng tìm hiểu về Array, Seq.
collection.mutable.BufferTôi tạo lại Map những người yêu trước đây bằng cách sử dụng mutable collection :
collection.mutable.Map
collection.mutable.Set
scala> val nguoiYeuCu = collection.mutable.Map("em Dung" -> "ngoan", "em Thao" -> "xinh")Tạo từ immutable collections khác :
nguoiYeuCu: scala.collection.mutable.Map[String,String] = Map(em Dung -> ngoan, em Thao -> xinh)
scala> nguoiYeuCu += ("em Thuỷ" -> "rất hư")
res0: nguoiYeuCu.type = Map(em Dung -> ngoan, em Thao -> xinh, em Thuỷ -> rất hư)
scala> val m = Map("key 1" -> "value 1", "key 2" -> "value 2")
m: scala.collection.immutable.Map[String,String] = Map(key 1 -> value 1, key 2 -> value 2)
scala> m.toBuffer
res2: scala.collection.mutable.Buffer[(String, String)] = ArrayBuffer((key 1,value 1), (key 2,value 2))
scala> val l = List("value 1", "value 2")
l: List[String] = List(value 1, value 2)
scala> l.toBuffer
res3: scala.collection.mutable.Buffer[String] = ArrayBuffer(value 1, value 2)
scala> val s = Set(1,2,3,4,5,5,5,5,6)*) bạn cũng có thể convert 1 immutable thành 1 mutable bằng cách sử dụng: toList, toMap and toSet .Giờ bạn hãy thử tạo vào mutable and convert thành immutable.
s: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3, 4)
scala> s.toBuffer
res4: scala.collection.mutable.Buffer[Int] = ArrayBuffer(5, 1, 6, 2, 3, 4)
Trong thế giới mutable Buffer rất hữu dụng để tạo ra mutable collection tuy nhiên chỉ có nó được dùng rộng rãi quá. Có 1 cách khác để bạn có thể sử dụng mutable collection an toàn hơn là sử dụng builder
Collection Builders
Builder là form giản đơn của buffer , để tạo ra một builder với kiểu collection cụ thể bạn cần KieuCollection.newBuilder[kiểu dữ liệu của collection]
Tôi sẽ tạo ra 1 builder là 1 Set của nhiều kí tự :
scala> val sbc = Set.newBuilder[Char]
sbc: scala.collection.mutable.Builder[Char,scala.collection.immutable.Set[Char]] = scala.collection.mutable.SetBuilder@3ede428e
scala> sbc += 'c'
res5: sbc.type = scala.collection.mutable.SetBuilder@3ede428e
scala> sbc ++= Set('h','a','o')
res6: sbc.type = scala.collection.mutable.SetBuilder@3ede428e
scala> sbc.result
res7: scala.collection.immutable.Set[Char] = Set(c, h, a, o)
Ok,có lẽ hôm nay nên dừng lại ở đây và hôm sau ta sẽ cùng tìm hiểu về Array, Seq.
Comments
Post a Comment