Tôi có bản đồ mà tôi cần ánh xạ với một loại khác và kết quả cần phải là Danh sách. Tôi có hai cách (dường như) để thực hiện những gì tôi muốn, vì việc gọi bản đồ trên bản đồ dường như luôn dẫn đến một bản đồ. Giả sử tôi có một số bản đồ mà trông giống như:Chuyển đổi Bản đồ Scala thành Danh sách
val input = Map[String, List[Int]]("rk1" -> List(1,2,3), "rk2" -> List(4,5,6))
tôi có thể hoặc là làm:
val output = input.map{ case(k,v) => (k.getBytes, v) } toList
Hoặc:
val output = input.foldRight(List[Pair[Array[Byte], List[Int]]]()){ (el, res) =>
(el._1.getBytes, el._2) :: res
}
Trong ví dụ đầu tiên tôi chuyển đổi các loại, và sau đó gọi ToList . Tôi giả sử thời gian chạy là một cái gì đó như O(n*2)
và không gian cần thiết là n*2
. Trong ví dụ thứ hai, tôi chuyển đổi loại và tạo danh sách trong một lần. Tôi giả sử thời gian chạy là O(n)
và khoảng trống được yêu cầu là n
.
Câu hỏi của tôi là, về cơ bản là giống hệt nhau hoặc chuyển đổi thứ hai có bị cắt giảm trên bộ nhớ/thời gian/etc không? Ngoài ra, tôi có thể tìm thông tin về lưu trữ và chi phí thời gian chạy của các chuyển đổi scala khác nhau ở đâu?
Xin cảm ơn trước.
+1. Đối với những người tìm hiểu cách thức hoạt động của 'breakOut', hãy xem câu trả lời tuyệt vời của Daniel Sobral, http://stackoverflow.com/questions/1715681/scala-2-8-breakout/1716558#1716558 –