2010-04-10 11 views
5

वर्तमान में, मैं एक दूसरे के खिलाफ हर इंटीजर तत्व का परीक्षण कर रहा हूं ताकि यह पता चल सके कि कौन से मेल खाते हैं। सरणी में अपने स्वयं के सेट में डुप्लीकेट नहीं होते हैं। इसके अलावा, सरणी हमेशा बराबर लंबाई नहीं होती है। क्या इसे गति देने के लिए कोई चाल है? मैं इसे हजारों बार कर रहा हूं, इसलिए यह मेरे कार्यक्रम में एक बोतल गर्दन बनना शुरू कर रहा है, जो सी # में है।सरणी के बीच मैचों की संख्या खोजने का सबसे तेज़ तरीका क्या है?

+0

क्या यह है कि आप बस दोनों सरणी में मौजूद सभी पूर्णांक की एक अनूठी सूची चाहते हैं? – Thomas

+0

थॉमस की टिप्पणी में जोड़ने के लिए, सरणी आदेश दिया गया है? –

+0

यह डालने का एक और तरीका होगा। दोनों सेटों में एक अनूठी सूची आम है। हाँ, उन्हें आदेश दिया जाता है। –

उत्तर

5

उपयोग एक HashSet

var set = new HashSet<int>(firstArray); 
set.IntersectWith(secondArray); 

सेट अब केवल मूल्यों है कि दोनों सरणियों में मौजूद होता है।

+0

मुझे लगता है कि आप चाहते हैं। इसके बजाय .Union –

+0

आह मस्तिष्क फार्ट! धन्यवाद। मैंने इसे संपादित किया। – Josh

+0

बस हैशसेट के साथ हैशसेट की कोशिश की और यह सभी तत्वों पर पुनरावृत्ति की तुलना में धीमी गति से दोगुनी है। –

6

आप LINQ इस्तेमाल कर सकते हैं:

var query = firstArray.Intersect(secondArray); 

या अगर सरणियों पहले से ही हल कर रहे हैं आप दो सरणियों के ऊपर अपने आप को पुनरावृति सकता है:

int[] a = { 1, 3, 5 }; 
int[] b = { 2, 3, 4, 5 }; 

List<int> result = new List<int>(); 
int ia = 0; 
int ib = 0; 
while (ia < a.Length && ib < b.Length) 
{ 
    if (a[ia] == b[ib]) 
    { 
     result.Add(a[ia]); 
     ib++; 
     ia++; 
    } 
    else if (a[ia] < b[ib]) 
    { 
     ia++; 
    } 
    else 
    { 
     ib++; 
    } 
} 
+0

@ मार्क: आपका कोड चुपचाप मानता है कि सरणी को – Vlad

+1

सॉर्ट किया गया है जॉन ने पहले से ही कहा है कि उपरोक्त टिप्पणियों में सरणी का आदेश दिया गया है। –

0

अगर इस तरह के एक तुलना अपने कार्यक्रम में अड़चन है, आप शायद एक अनुचित डेटा संरचना का उपयोग कर रहे हैं। आपके डेटा को सॉर्ट करने का सबसे आसान तरीका हो सकता है। फिर सामान्य प्रविष्टियों को खोजने के लिए, आपको केवल एक बार दोनों सरणी को पार करने की आवश्यकता होगी। डेटा को हैशसेट में रखना एक और विकल्प होगा।

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

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