2010-07-07 36 views
56

Tôi đang cố gắng tìm các giá trị giao nhau giữa nhiều mảng.đường ray - Tìm giao lộ giữa nhiều mảng

ví dụ

code1 = [1,2,3] 
code2 = [2,3,4] 
code3 = [0,2,6] 

Vì vậy, kết quả sẽ là 2

Tôi biết trong PHP bạn có thể làm điều này với array_intersect

tôi muốn để có thể dễ dàng thêm mảng thêm vì vậy tôi don thực sự không muốn sử dụng nhiều vòng lặp

Bất kỳ ý tưởng nào?

Cảm ơn, Alex

Trả lời

89

Sử dụng & phương pháp Array mà là dành cho ngã tư đề ra.

Ví dụ:

> [1,2,3] & [2,3,4] & [0,2,6] 
=> [2] 
+0

@Anurag Bạn có chắc chắn điều này có hiệu quả không? Trừ khi tôi hiểu sai các yêu cầu của OP, mảng đầu tiên và cuối cùng không được thử nghiệm với nhau cho giao lộ. Ví dụ: '[1,2,3] & [4,5,6] & [1,2,3]' trả về một mảng trống. – Noz

+0

@Cyle bất kỳ phần tử nào trong kết quả của giao lộ ba chiều sẽ tồn tại trong cả ba toán hạng. Xem http://en.wikipedia.org/wiki/Intersection_(set_theory) – bdares

34

Nếu bạn muốn có một cách đơn giản hơn để làm điều này với một mảng của mảng có độ dài không rõ, bạn có thể sử dụng bơm.

> arrays = [code1,code2,code3] 
> arrays.inject(:&)     # Ruby 1.9 shorthand 
=> [2] 
> arrays.inject{|codes,x| codes & x } # Full syntax works with 1.8 and 1.9 
=> [2] 
+0

'arrays.inject (: &)' sẽ không hoạt động trong 1,9. điều này sẽ làm việc mặc dù 'arrays.inject (: '&')' –

+0

'arrays.inject (: &)' hoạt động với tôi trong 1.9 (1.9.3p429) – Florent2

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