2010-07-19 15 views
6

मेरे पास तारों के दो सरणी हैं (या सरणीसूची यदि यह आसान है)। मुझे इनकी तुलना करने की आवश्यकता है, यह पता लगाएं कि केवल पहले सरणी में मौजूद है, जो दोनों में मौजूद है, और जो केवल दूसरे सरणी में मौजूद है। ये सरणी अलग-अलग लंबाई हैं, और विभिन्न ऑर्डर में हो सकती हैं। यदि आवश्यक हो, तो मुझे लगता है कि मैं उन्हें सॉर्ट कर सकता हूं ...दो सरणी या सरणीसूची की तुलना करें, समान और अलग-अलग मानों को ढूंढें

मुझे पता है कि मैं इसे एक साथ हैक कर सकता हूं, लेकिन मुझे लगता है कि इसमें काफी मानक और कुशल/"सर्वश्रेष्ठ" समाधान हो सकता है, और मैं किसी भी चीज़ से उत्सुक हूं।

मैं इसके लिए सी # का उपयोग कर रहा हूं, लेकिन यदि आप किसी अन्य भाषा में अपना समाधान लिखना चाहते हैं, तो किसी भी मदद का स्वागत है।

सहायता के लिए धन्यवाद!

+2

किसी भी अवसर से होमवर्क? –

+1

यहां लिंक 101 नमूने देखें, उन्हें मदद करनी चाहिए (विशेष रूप से सेट ऑपरेटर): http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx – andyp

+0

नहीं, यह होमवर्क हाहा नहीं है। मुझे पता है कि मैं लगभग 20 मिनट में क्या कर सकता था उससे एक कूलर/अधिक कुशल तरीका है। मैंने पहले लिंक का उपयोग नहीं किया है, लेकिन यह इसमें गोता लगाने का सही समय हो सकता है। सलाह के लिये धन्यवाद। – Wes

उत्तर

2
var onlyinfirst = from s in list1 where !list2.Contains(s) select s; 
var onlyinsecond = from s in list2 where !list1.Contains(s) select s; 
var onboth = from s in list1 where list2.Contains(s) select s; 
+0

यही वह है जो मैं आया था। मैंने सोचा कि तुलनात्मक या कुछ का उपयोग करके इसे करने का कुछ अच्छा सी #/.net तरीका है। मैं कुछ linq भी कोशिश करूँगा, लेकिन अगर सब कुछ विफल रहता है यह काम करेगा। – Wes

+2

ध्यान दें कि यदि सूचियां आकार एन और एम हैं तो ये समाधान सभी ओ (एन * एम) हैं। एम और एन बड़े होने पर कहीं अधिक कुशल समाधान मौजूद हैं। –

6

यदि सरणी बड़ी हैं तो आप इन संरचनाओं के लिए सक्षम डेटा संरचना का उपयोग करना चाहेंगे; सरणी नहीं हैं।

बेकार समाधान ओ (एन^2) समय में है यदि सरणी आकार n हैं।

यदि आप जगहों में सरणी को सॉर्ट करते हैं तो आप उन्हें बाइनरी आइटम के लिए खोज सकते हैं; सॉर्टिंग की संभावना ओ (एन एलजी एन) होगी और एलजी एन प्रति खोज की लागत पर एन बार खोजना समय पर ओ (एन एलजी एन) होगा।

यदि आप प्रत्येक सरणी को पहले HashSet<T> में बदलते हैं तो आप इसे ओ (एन) समय और ओ (एन) अतिरिक्त स्थान में कर सकते हैं।

+0

मैंने कभी भी हैशसेट का उपयोग नहीं किया है लेकिन बहुत उत्सुक हूं, मैं इसे देख लूंगा, धन्यवाद! – Wes

+0

@ वेस: 'हैशसेट' को .NET Framework 3.5 में पेश किया गया था। – Brian

+1

@ वेस: @ ब्रायन: और इसे अधिक समझदार नाम "सेट" के बजाय हैशसेट कहा जाता था क्योंकि ... इसके लिए प्रतीक्षा करें ... क्योंकि "सेट" * विजुअल बेसिक * का एक कीवर्ड है। –

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