आप डुप्लिकेट के बारे में परवाह नहीं करते हैं (अर्थात आप मानेंगे {1, 2, 3}
{1, 2, 3, 2}
के बराबर होना चाहिए) तो:
new HashSet<int>(A).SetEquals(B)
(या जो कुछ भी है प्रकार तत्व int
के बजाय टाइप)।
अन्यथा:
public static bool SequenceEqualUnordered<T>(IEnumerable<T> first, IEnumerable<T> second)
{
if (first == null)
return second == null; // or throw if that's more appropriate to your use.
if (second == null)
return false; // likewise.
var dict = new Dictionary<T, int>(); // You could provide a IEqualityComparer<T> here if desired.
foreach(T element in first)
{
int count;
dict.TryGetValue(element, out count);
dict[element] = count + 1;
}
foreach(T element in second)
{
int count;
if (!dict.TryGetValue(element, out count))
return false;
else if (--count == 0)
dict.Remove(element);
else
dict[element] = count;
}
return dict.Count == 0;
}
पहले क्रम में प्रत्येक तत्व का एक मिलान करते रहें, फिर इसके खिलाफ दूसरे की जाँच करें। जिस क्षण आपके पास दूसरे अनुक्रम में बहुत अधिक है, आप झूठी वापसी कर सकते हैं, अन्यथा यदि आपके पास लम्बे समय के शब्दकोश में कुछ भी नहीं बचा है, तो वे बराबर हैं, या झूठ हैं यदि कोई तत्व शेष है।
OrderBy()
का उपयोग करने के दो ओ (एन लॉग एन) प्रकारों के बजाय ओ (एन) तुलना के बाद, आपके पास ओ (एन) ऑपरेशन बिल्डिंग लम्बी सेट का सेट है, और ओ (एन) के खिलाफ जांच यह।
स्रोत
2016-01-11 14:49:29
संभावित डुप्लिकेट [उनमें से वस्तुओं के क्रम के बावजूद समानता के लिए दो संग्रहों की तुलना करना] (http://stackoverflow.com/questions/50098/comparing-two-collections-for-equality-irrespective-of-the- ऑर्डर-ऑफ-आइटम-इन-द) – nawfal