2012-04-19 13 views
37

के बीच सामान्य में मान खोजें यदि मैं दो सरणी की तुलना करना चाहता हूं और एक इंटरपोलेटेड आउटपुट स्ट्रिंग बनाना चाहता हूं, तो से कोई सरणी चर x में मौजूद है, तो मैं प्रत्येक मिलान तत्व के लिए आउटपुट कैसे प्राप्त कर सकता हूं?दो एरे

यही वह है जो मैं कोशिश कर रहा था लेकिन नतीजा नहीं मिला।

x = [1, 2, 4] 
y = [5, 2, 4] 
x.each do |num| 
    puts " The number #{num} is in the array" if x.include?(y.each) 
end #=> [1, 2, 4] 

उत्तर

96

आप उस के लिए सेट चौराहे विधि & उपयोग कर सकते हैं:

x = [1, 2, 4] 
y = [5, 2, 4] 
x & y # => [2, 4] 
+0

अच्छा और सरल समाधान धन्यवाद। – sayth

+1

यह विधि दो से अधिक सरणी के लिए भी काम करती है। सभी सरणी में वांछित शब्द होना चाहिए, यद्यपि। – Tommyixi

+0

यह काम करेगा यदि सूचकांक एक ही मूल्य के लिए समान नहीं हैं? – jacoballenwood

16
x = [1, 2, 4] 
y = [5, 2, 4] 
intersection = (x & y) 
num = intersection.length 
puts "There are #{num} numbers common in both arrays. Numbers are #{intersection}" 

विल उत्पादन:

There are 2 numbers common in both arrays. Numbers are [2, 4] 
2

ठीक है, तो & ऑपरेटर केवल एक चीज प्रतीत होता है आपको यह जवाब पाने के लिए करना होगा।

लेकिन इससे पहले कि मैं जानता था कि मैं सरणी वर्ग के लिए एक त्वरित बंदर पैच लिखा ऐसा करने के लिए:

class Array 
    def self.shared(a1, a2) 
    utf = a1 - a2 #utf stands for 'unique to first', i.e. unique to a1 set (not in a2) 
    a1 - utf 
    end 
end 

& ऑपरेटर सही जवाब यहाँ हालांकि है। और अधिक सुंदर।

संबंधित मुद्दे