Làm cách nào để kiểm tra xem khóa hoặc giá trị có tồn tại trong Bản đồ hay không?


87

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:


141

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.


13
Cũng đáng nói rằng để kiểm tra sự tồn tại của một khóa, thư viện cung cấp myMap.contains ("fish")
Dave Griffith

2
@DaveGriffith - Thật vậy. Tôi chỉ sử dụng "tồn tại", nhưng một cái đủ quan trọng (vì nó là cái bạn nên sử dụng) để thêm vào. Tôi đã sửa đổi câu trả lời cho phù hợp.
Rex Kerr

25

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

9

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."


6

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 truenếu bản đồ chứa cgiá trị.

Nếu bạn nhấn mạnh vào việc sử dụng exists:

map.exists({case(_, value) => value == 'c'})

2
valuestạ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')!)
Luigi Plinge

3

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 đồ

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.