Tôi muốn biết trong trường hợp nào các cấu trúc dữ liệu là tối ưu để sử dụng kiểm tra "chứa" hoặc "tồn tại".SCALA: Cấu trúc dữ liệu nào tối ưu trong đó siutations khi sử dụng ".contains()" hoặc ".exists()"?
Tôi hỏi vì tôi đến từ một nền Python và sáng sử dụng để sử dụng các biểu thức if x in something:
cho mọi thứ. Ví dụ, trong đó biểu thức được đánh giá là nhanh nhất:
val m = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4)
//> m : scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3, 4
//| -> 4)
val l = List(1,2,3,4) //> l : List[Int] = List(1, 2, 3, 4)
val v = Vector(1,2,3,4) //> v : scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)
m.exists(_._1 == 3) //> res0: Boolean = true
m.contains(3) //> res1: Boolean = true
l.exists(_ == 3) //> res2: Boolean = true
l.contains(3) //> res3: Boolean = true
v.exists(_ == 3) //> res4: Boolean = true
v.contains(3) //> res5: Boolean = true
trực giác, tôi sẽ giả định rằng vectơ nên là nhanh nhất để kiểm tra ngẫu nhiên, và danh sách sẽ là nhanh nhất nếu ai biết rằng giá trị kiểm tra là vào đầu những và có rất nhiều dữ liệu. Tuy nhiên, một xác nhận hoặc sửa chữa sẽ được chào đón nhiều nhất. Ngoài ra, vui lòng mở rộng sang các cấu trúc dữ liệu khác.
Lưu ý: Vui lòng cho tôi biết nếu bạn cảm thấy câu hỏi này quá mơ hồ vì tôi không chắc tôi đang nói đúng cách.
FYI http://www.scala-lang.org/docu/files/collections-api/collections_40.html –
Trong Python, giống như mọi ngôn ngữ khác, loại dữ liệu trừu tượng được lựa chọn khi bạn chủ yếu cần kiểm tra thành viên là một ** tập **, không phải là một chuỗi hoặc ánh xạ. – delnan
Kiểm tra một phần tử cụ thể là ** không ** kiểm tra ngẫu nhiên, nó ngắn hơn quét toàn bộ vectơ/danh sách/mảng: * lấy phần tử đầu tiên, so sánh, nếu không bằng, mất giây, so sánh, ... *. Ở phía bên kia, 'contains' trên tập hợp và bản đồ có nghĩa là không đổi (không giống như tồn tại, trước tiên phải áp dụng một số biến vị ngữ nào đó và vì vậy, tôi nghĩ là tuyến tính) –