Tôi đã cố gắng sử dụng Map.map để chuyển đổi bản đồ thành Danh sách các bộ dữ liệu. Tuy nhiên điều này không thành công. Tôi đã thực hiện các thử nghiệm sau:Scala: ánh xạ Bản đồ vào danh sách các bộ dữ liệu
val m = Map(("a" -> 1), ("b" -> 2))
//> m : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r1 = m.map{ case (k,v) => v} //> r1 : scala.collection.immutable.Iterable[Int] = List(1, 2)
def toTuple[A,B](a:A,b:B) = (a,b) //> toTuple: [A, B](a: A, b: B)(A, B)
//val r2: List[Tuple2[_,_]] = m.map(e => (e._1,e._2))
val r3 = m.map(e => toTuple(e._1,e._2)) //> r3 : scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
val r4 = m.toSeq //> r4 : Seq[(String, Int)] = ArrayBuffer((a,1), (b,2))
Lưu ý cách tạo Danh sách cho các phần tử đơn (r1) nhưng Bản đồ được tạo cho bộ dữ liệu (r3). Thậm chí không ép buộc kiểu làm việc (r2). Chỉ có một cuộc gọi rõ ràng để Seq đã làm nó (r4) Vì vậy, câu hỏi của tôi là, tại sao/như thế nào Map.map "automagically" tạo ra một bản đồ mới và không phải là một danh sách ví dụ? Trong thực tế, loại trả lại được xác định như thế nào (Seq, Danh sách, v.v.)
Điều gì sai với 'm.toList'? Cũng lưu ý rằng ánh xạ trên một bộ sưu tập trả về một bộ sưu tập cùng loại, vì vậy bạn không thể thực sự trả về ánh xạ danh sách trên một 'Bản đồ', trừ khi bạn gọi' .toList' trên nó. –
@Ende - Không có gì sai. Xem bình luận dưới đây. – user2051561