इस सवाल का स्वीकृत उत्तर वैध रूप से प्रश्न का उत्तर नहीं देता है! यह सही उत्तर देने के लिए होता है, लेकिन यह उत्तर उनके द्वारा दिए गए सबूतों से नहीं दिखाया जाता है।
उस उत्तर से पता चलता है कि कुंजी देखने पर Dictionary
या किसी में देखने की HashSet
तुलना में बहुत जल्दी है List
। जो सच है, लेकिन दिलचस्प नहीं है, न ही आश्चर्य की बात है, और न ही सबूत है कि उनके पास समान गति है।
मैंने लुकअप समय की तुलना करने के लिए नीचे दिए गए कोड को चलाया है, और मेरा निष्कर्ष यह है कि वे वास्तव में समान गति वाले हैं। (या कम से कम, अगर कोई अंतर है, तो अंतर उस गति के मानक विचलन के भीतर अच्छी तरह से है)
विशेष रूप से, इस परीक्षण में, मेरे लिए, दोनों के लिए १०,०००,००० लुकअप १० से ११.५ सेकंड के बीच हो रहे थे।
टेस्ट कोड:
private const int TestReps = 100_000_000;
[Test]
public void CompareHashSetContainsVersusDictionaryContainsKey()
{
for (int j = 0; j < 10; j++)
{
var rand = new Random();
var dict = new Dictionary<int, int>();
var hash = new HashSet<int>();
for (int i = 0; i < TestReps; i++)
{
var key = rand.Next();
var value = rand.Next();
hash.Add(key);
dict.TryAdd(key, value);
}
var testPoints = Enumerable.Repeat(1, TestReps).Select(_ => rand.Next()).ToArray();
var timer = new Stopwatch();
var total = 0;
timer.Restart();
for (int i = 0; i < TestReps; i++)
{
var newKey = testPoints[i];
if (hash.Contains(newKey))
{
total++;
}
}
Console.WriteLine(timer.Elapsed);
var target = total;
Assert.That(total == target);
timer.Restart();
for (int i = 0; i < TestReps; i++)
{
var newKey = testPoints[i];
if (dict.ContainsKey(newKey))
{
total++;
}
}
Console.WriteLine(timer.Elapsed);
Assert.That(total == target * 2);
Console.WriteLine("Set");
}
}