2010-02-15 18 views
40

दिए गए 2 int arrays उदाहरण के लिए, foo और bar, यह जांचने का सबसे प्रभावी तरीका क्या है कि सरणी बार में कम से कम एक आइटम शामिल है जिसमें foo शामिल है। सच/झूठ वापस करना चाहिए।जांचें कि किसी सरणी में किसी अन्य सरणी से कोई आइटम शामिल है

मुझे नेस्टेड फोरैच पर संदेह है लेकिन सिर्फ यह सोच रहा है कि क्या एक अच्छा तरीका है।

+0

क्या यह होमवर्क है? क्या अरबी मनमाने ढंग से बड़े हैं, या कहें, 100 तत्व हैं? क्या आपने ब्रूट-फोर्स फोरैच के अलावा कुछ भी करने की कोशिश की है? –

+0

नहीं, यह होमवर्क नहीं है! ... बस यह पता लगाया कि ऐसा करने का शायद एक अच्छा तरीका है। – raklos

उत्तर

87

LINQ का उपयोग करना:

array1.Intersect(array2).Any() 
+3

किसी भी का उपयोग() का आश्वासन देता है कि जब पहली बराबर वस्तु पाई जाती है तो चौराहे एल्गोरिदम बंद हो जाता है। – Olli

+5

ध्यान रखें कि सभी सरणी 1 की गणना की गई है, इसलिए संभवतः यदि संभव हो तो आप छोटे सरणी को सरणी 1 के रूप में चाहते हैं –

+2

मैंने कभी भी इंटरसेक्ट विधि के बारे में नहीं सुना है, इसलिए मुझे यह देखना होगा कि यह क्या करता है: http://msdn.microsoft.com/en -us/library/bb460136.aspx यह मूल रूप से आपको उन वस्तुओं की एक सूची देता है जो तुलनात्मक सरणी दोनों में पाए जाते हैं। किसी भी ऑपरेटर के साथ आप जानते हैं कि इस मामले में array1 और array2 में एक ही स्ट्रिंग है या नहीं। – Stefanvds

1

हाँ नेस्ट छोरों, हालांकि एक छिपा हुआ है:

bool AnyAny(int[] A, int[]B) 
{ 
    foreach(int i in A) 
     if (B.Any(b=> b == i)) 
      return true; 
    return false; 
} 
6

सी # 3:

bool result = bar.Any(el => foo.Contains(el)); 

सी # 4 समानांतर निष्पादन:

bool result = bar.AsParallel().Any(el => foo.AsParallel().Contains(el)); 
+0

मेरे मामले में foo el की substring है। तो, 'बूल परिणाम = बार। कोई भी (el => foo.Contains (el));' आवश्यक परिणाम नहीं देगा। इस सवाल को लागू करने के लिए कोई सुझाव? –

0

एक-शॉट यादृच्छिक-सरणी दृष्टिकोण के लिए, आपकी विधि सबसे तेज़ प्रतीत होती है। ऐसे तरीके हैं जो एक या दोनों मैट्रिक्स को सॉर्ट किए जाने पर इसे अधिक प्रभावी बना देंगे, उनके ऊपरी/निचले सीमाएं ज्ञात हैं, या उनमें से एक दूसरे की तुलना में कहीं अधिक दुर्लभ रूप से बदलती है और आप कई चेक करते हैं। बात यह है कि आप विभिन्न हैंश, इंडेक्स और संकेत तैयार कर सकते हैं जो खोज को लगभग कुछ भी अनुकूलित नहीं करेंगे, लेकिन अकेले अनुक्रमणित करने की प्रक्रिया आमतौर पर एक से अधिक खोज लेती है।

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