Tôi có Bản đồ tỷ lệ và muốn kiểm tra xem có một giá trị nào đó tồn tại trong bản đồ hay không.
myMap.exists( /*What should go here*/ )
Câu trả lời:
Có một số tùy chọn khác nhau, tùy thuộc vào ý bạn.
Nếu bạn muốn nói đến cặp khóa-giá trị "giá trị" , thì bạn có thể sử dụng một cái gì đó như
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
Nếu ý bạn là giá trị của cặp khóa-giá trị , thì bạn có thể
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
Nếu bạn chỉ muốn kiểm tra khóa của cặp khóa-giá trị , thì
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
Lưu ý rằng mặc dù các biểu mẫu tuple (ví dụ _._1 == "fish"
) kết thúc là ngắn hơn, các biểu mẫu dài hơn một chút rõ ràng hơn về những gì bạn muốn xảy ra.
Bạn muốn biết giá trị tồn tại trên bản đồ hay khóa? Nếu bạn muốn kiểm tra khóa, hãy sử dụng isDefinedAt
:
myMap isDefinedAt key
bạn cung cấp một bài kiểm tra mà một trong các giá trị bản đồ sẽ vượt qua, tức là
val mymap = Map(9->"lolo", 7->"lala")
mymap.exists(_._1 == 7) //true
mymap.exists(x => x._1 == 7 && x._2 == "lolo") //false
mymap.exists(x => x._1 == 7 && x._2 == "lala") //true
ScalaDocs nói về phương pháp "Kiểm tra xem một vị từ có giữ một số phần tử của bản đồ bất biến này hay không."
Cái này thì sao:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
Lợi nhuận true
nếu bản đồ chứa c
giá trị.
Nếu bạn nhấn mạnh vào việc sử dụng exists
:
map.exists({case(_, value) => value == 'c'})
values
tạo ra một cái mới Iterable
để bạn có thể tốt hơn với map.valuesIterator.contains('c')
(mặc dù điều đó không dễ dàng bằng map.exists(_._2 == 'c')
!)
Theo các câu trả lời ở trên, lưu ý rằng tồn tại () chậm hơn đáng kể so với hàm chứa () (Tôi đã đo điểm chuẩn với Bản đồ chứa 5000 khóa chuỗi và tỷ lệ là x100 nhất quán). Tôi tương đối mới với scala nhưng phỏng đoán của tôi là tồn tại () đang lặp lại trên tất cả các khóa (hoặc khóa, giá trị tupple) trong khi chứa sử dụng quyền truy cập ngẫu nhiên của Bản đồ