2011-04-01 14 views
19

मैं ज़िप कोड की तुलना कर रहा हूं।दो सरणी की सामग्री की तुलना कैसे करें?

ZIP_MORRIS 
ZIP_UNION 
ZIP_ESSEX 

मैं एक उपयोगकर्ता एक वस्तु की श्रेणी में है अगर देखना चाहते हैं, सभी ज़िप उन में से एक में शामिल:

मैं ज़िप कोड के तीन स्थिरांक की है।

ZIP_UNION.sort{|x,y| y <=> x} <=> Email.find(3).distributions.map(&:zip_code).uniq.compact.sort{|x,y| y <=> x} 

लेकिन दुर्भाग्य से, यह सिर्फ सभी ज़िप कोड नक्शे, तो एक अलग काउंटी में एक अतिरिक्त जिप चयन करने के लिए अगर मैं थे, तो यह ठीक से उनकी तुलना नहीं होता:

मैं इस कोशिश की।

मुझे लगता है कि सबसे अच्छा समाधान उपयोगकर्ता जेनरेटेड ज़िप के मानों की तुलना करना होगा, और देखें कि एक ज़िप_COUNTY में सभी ज़िपों को सरणी के अंदर मौजूद हैं या नहीं।

कुछ प्रकार के इटरेटर जो सभी ज़िपों के माध्यम से चलेंगे और यह सुनिश्चित करेंगे कि उपयोगकर्ता का ज़िप एक ज़िप समूह में प्रत्येक ज़िप को शामिल न करे या इसमें शामिल न हो।

कोई विचार?

उत्तर

67

यदि परिणाम खाली सरणी है, 2 सरणियों ही तत्वों का समावेश है, सरणी मतभेद कर सकते हैं:

>> [1,2,3]-[3,1,2] #=> [] 

आप अभी भी तत्वों को छोड़ दिया है, तो नहीं पहली सरणी के सभी तत्वों में मौजूद थे दूसरा:

>> [1,2,5]-[3,1,2] #=> [5] 
+4

सरलता केक लेता है। – Trip

+1

@ टिप: सरलता से बाहर सरलता। हमारे ऐप में मुझे अक्सर कई सौ हजार तत्वों के आईडी सरणी के साथ कुछ समान करना होता है। अन्य सभी विधियां बहुत धीमी साबित हुईं। –

+13

यह समाधान @ ट्रिप के प्रश्न में विशिष्ट उदाहरण के लिए काम करता है, लेकिन सामान्य मामले के लिए नहीं। आपको दो बार अंतर ऑपरेशन करने की आवश्यकता होगी: # जहां तत्वों की संख्या से मेल नहीं खाती है [1] - [1,2] # => [] [1,2] - [1] # => [2] # जहां तत्व [1,1,2] - [2,2,1] # => [] [2,2,1] - [1,1,2] # => [] – bobics

8

नीचे मैं सब का उपयोग कर रहा हूँ? एक सरणी है, जो सच वापस आ जाएगी अगर सरणी में आइटम के सभी ब्लॉक मैं में गुजर रहा हूँ के लिए सच लौटने पर ऑपरेटर।

my_zip = [1,2,3,4,5,6] 
[2,3,5].all?{|z| my_zip.include?(z)} 
=> true 
[20,3,5].all?{|z| my_zip.include?(z)} 
=> false 

तुम बस इसे बदलने के ऊपर उपयोगकर्ता के पिन कोड की होने के लिए चाहते हैं

+0

लगभग .. मेरे पास उन सभी को चुना गया है, इसलिए ** ** को सत्य प्रस्तुत करना चाहिए। लेकिन ऐसा नहीं है। मैं मान रहा हूं क्योंकि इसमें अन्य ज़िप भी शामिल हैं जो 'my_zip' और जरूरी नहीं है। – Trip

+1

2 सरणी की लंबाई के आधार पर, यह बहुत धीमा हो सकता है। –

5
> [1,2,3] <=> [1,2,3] 
=> 0 
> [1,2,3] <=> [2,2,3] 
=> -1 
> [1,2,3] <=> [3,2,3] 
=> -1 
> [1,2,3] <=> [1,3,3] 
=> -1 
> [1,2,3] <=> [1,1,3] 
=> 1 

इस RailsThinker Post से है और मेरे लिए काम कर रहा है बहुत अच्छी तरह से।

+0

धन्यवाद !, महान ऑपरेटर, खासकर जब आप अर्थपूर्ण संस्करणों की तुलना करना चाहते हैं! – MhdSyrwan

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