2012-05-12 43 views

Trả lời

94

Có những lựa chọn khác nhau, tùy thuộc vào những gì bạn có ý nghĩa.

Nếu bạn có ý nghĩa bởi "giá trị" giá trị khóa cặp, sau đó bạn có thể sử dụng một cái gì đó giống như

myMap.exists(_ == ("fish",3)) 
myMap.exists(_ == "fish" -> 3) 

Nếu bạn có ý nghĩa giá trị của cặp khóa-giá trị, sau đó 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ị, sau đó

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 ngắn hơn, các biểu mẫu hơi dài hơn rõ ràng hơn về những gì bạn muốn xảy ra.

+8

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 ("cá") –

+2

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

8

bạn cung cấp một thử nghiệm mà một trong những giá trị bản đồ sẽ vượt qua, ví dụ:

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 

Các ScalaDocs nói về phương pháp "thử nghiệm liệu một vị tổ chức cho một số các yếu tố của bản đồ này không thay đổi. ", catch là nó nhận được một tuple (key, value) thay vì hai tham số.

5

gì về điều này:

val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd') 
map.values.toSeq.contains('c') //false 

sản lượng 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'}) 
+2

'values' tạo mới' Iterable', do đó bạn có lẽ là tốt hơn với 'map.valuesIterator.contains ('c')' (mặc dù điều đó không dễ dàng như 'map.exists (_._ 2 == 'c')'!) –

14

Bạn có muốn biết liệu giá trị có tồn tại trên bản đồ hay không? Nếu bạn muốn kiểm tra chìa khóa, sử dụng isDefinedAt:

myMap isDefinedAt key 
0

mỗi câu trả lời ở trên, lưu ý rằng tồn tại() là chậm hơn đáng kể so với chứa() (Tôi đã làm chuẩn với một bản đồ chứa 5000 phím chuỗi, và tỷ lệ là x100 nhất quán). Tôi là tương đối mới để scala nhưng tôi đoán là tồn tại() là iterating trên tất cả các phím (hoặc chìa khóa, giá trị tupple) trong khi có sử dụng truy cập ngẫu nhiên của Map

Các vấn đề liên quan