2011-11-06 24 views

Trả lời

80

Sử dụng bộ nút giao thông (Array#:&):

(myarray & ["val1", "val2", "val3", "val4"]).present? 

Bạn cũng có thể lặp (any? sẽ dừng lại ở sự xuất hiện đầu tiên):

myarray.any? { |x| ["val1", "val2", "val3", "val4"].include?(x) } 

Đó là ok cho các mảng nhỏ, trong trường hợp chung bạn có O (1) predicates:

values = ["val1", "val2", "val3", "val4"].to_set 
myarray.any? { |x| values.include?(x) } 

Với Ruby> = 2.1, sử dụng Set#intersect:

myarray.to_set.intersect?(values.to_set) 
+1

là có một cái gì đó đơn giản hơn để đọc như thế này 'nếu myarray.include? ['val1', 'val2', 'val3'] 'Nếu không, thì tôi đoán câu trả lời của bạn có vẻ tốt nhất. – Hopstream

+0

@Hopstream, đã thêm một triển khai khác với bất kỳ tính năng nào? – tokland

+2

lý do sử dụng biểu mẫu phủ định? tại sao không chỉ sử dụng '(tự & khác) .any?' thay vì '! (tự & khác) .empty? ' –

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