यहां LINQ एक्सटेंशन विधियों के मानक हैं। परिणाम एक वास्तविक कार्यक्रम के विकास के दौरान प्राप्त किए गए थे।
परीक्षण: 2 सूचियां (lst1 और lst2) प्रत्येक लगभग 250000 ऑब्जेक्ट्स। प्रत्येक ऑब्जेक्ट (क्लास कुंजी) में एक स्ट्रिंग और एक पूर्णांक होता है। दूसरी सूची में सबसे पहले एक ही प्रविष्टियां होती हैं, लेकिन कुछ नई प्रविष्टियां जोड़ दी जाती हैं और कुछ हटा दी जाती हैं।
मैंने एक्सेप्शन एक्सटेंशन विधि का परीक्षण किया।
var को छोड़कर = lst2.Except (lst1);
सूची lst = को छोड़कर .सूची();
इन 2 लाइनों ने "नए परिवर्धन" की 600 आइटम सूची बनाई। मैंने स्टॉपवॉच ऑब्जेक्ट का उपयोग करके इसे समय दिया। गति आश्चर्यजनक है: 220 एमएस। मैंने जो कंप्यूटर इस्तेमाल किया वह किसी भी तरह से "तेज़ गोंजालेस" नहीं है। कोर 2 डुओ T7700 - 2.4GHz।
नोट:
यहाँ वर्ग कुंजी है, जो IEquatable मैं चेहरा लागू करता है।
public class Key : IEquatable<Key>
{
public int Index { get; private set; }
public string Name { get; private set; }
public Key(string keyName, int sdIndex)
{
this.Name = keyName;
this.Index = sdIndex;
}
// IEquatable implementation
public bool Equals(Key other)
{
//Check whether the compared object is null.
if (Object.ReferenceEquals(other, null)) return false;
//Check whether the compared object references the same data.
if (Object.ReferenceEquals(this, other)) return true;
//Check whether the products' properties are equal.
return Index.Equals(other.Index) && Name.Equals(other.Name);
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public override int GetHashCode()
{
//Get hash code for the name field if it is not null.
int hashKeyName = Name == null ? 0 : Name.GetHashCode();
//Get hash code for the index field.
int hashKeyIndex = Index.GetHashCode();
//Calculate the hash code for the Key.
return hashKeyName^hashKeyIndex;
}
}
स्रोत
2011-10-25 22:03:07
क्या आप जानते हैं कि किस प्रकार की प्रदर्शन गारंटीएं हैं?संभावित रूप से छोड़कर पहले प्रत्येक सरणी की एक क्रमबद्ध प्रतिलिपि बनाना होगा। मुझे एमएसडीएन पर इनमें से कोई भी नहीं मिला। – Eclipse
नहीं, यह एक क्रमबद्ध प्रतिलिपि नहीं बनाता है। यह बहिष्कृत अनुक्रम से एक सेट बनाता है, और फिर स्रोत अनुक्रम पर पुनरावृत्त करता है, जो किसी भी तत्व को उपरोक्त अनुक्रम में नहीं देता है। –
(जब मैं कहता हूं "सेट" मेरा मतलब है "हैश सेट"।) –