2012-01-26 32 views
20

Tôi đang sử dụng Rails và tôi có một đối tượng băm. Tôi muốn tìm kiếm giá trị băm cho một giá trị cụ thể. Tôi không biết các khóa được liên kết với giá trị đó.Làm cách nào để kiểm tra xem giá trị cụ thể có tồn tại trong băm không?

Làm cách nào để kiểm tra xem một giá trị cụ thể có tồn tại trong băm không? Ngoài ra, làm cách nào để tìm khóa được liên kết với giá trị cụ thể đó?

Trả lời

42

Hash bao gồm Enumerable, vì vậy bạn có thể sử dụng nhiều phương pháp trên mô-đun đó để duyệt qua băm. Nó cũng có phương pháp này tiện dụng:

hash.has_value?(value_you_seek) 

Để tìm chìa khóa gắn liền với giá trị đó:

hash.key(value_you_seek) 

API documentation for Ruby (1.9.2) này sẽ hữu ích.

+0

này không đi qua băm lồng nhau – nathanengineer

1

Lớp Hash có phương thức select sẽ trả lại giá trị băm mới của các mục mà khối đó là đúng;

h = { "a" => 100, "b" => 200, "c" => 300 } 
h.select {|k,v| v == 200} #=> {"b" => 200} 

Bằng cách này, bạn sẽ tìm kiếm theo giá trị và nhận khóa của mình!

+0

Tại sao điều này khi Hash đã xây dựng trong các phương pháp? – max

-2

Một phiên bản thậm chí ngắn hơn mà bạn có thể sử dụng sẽ hash.values

0

Trong khi Hash#has_key? công trình nhưng, như Matz viết here, người ta đã phản đối ủng hộ Hash#key?.

Hash Phương thức key? cho bạn biết liệu một khóa nhất định có hiện diện hay không.

hash.key?(:some_key) 
0

Nếu bạn làm hash.values, bây giờ bạn có một mảng.

On mảng bạn có thể sử dụng các phương pháp tìm kiếm Enumerable include?

hash.values.include?(value_you_seek) 
Các vấn đề liên quan