এই প্রশ্নের গৃহীত উত্তর বৈধভাবে প্রশ্নের উত্তর দেয় না! সঠিক উত্তর দেওয়ার ক্ষেত্রে এটি ঘটে তবে তাদের দেওয়া প্রমাণ দ্বারা উত্তরটি প্রদর্শিত হয় না।
কি যে উত্তর শো একটি উপর কী লুক-হয় Dictionary
বা HashSet
একটি আপ খুঁজছেন চেয়ে অতি দ্রুততর হয় List
। যা সত্য, তবে আকর্ষণীয় নয়, অবাক হওয়ার মতোও নয় বা প্রমাণও নেই যে তাদের একই গতি রয়েছে।
দেখার সময়টির তুলনা করার জন্য আমি নীচের কোডটি চালিয়েছি এবং আমার উপসংহারটি হ'ল তারা আসলে একই গতি। (বা কমপক্ষে, যদি কোনও পার্থক্য থাকে তবে পার্থক্যটি সেই গতির স্ট্যান্ডার্ড বিচ্যুতির মধ্যে ভালভাবে হয়)
বিশেষত, এই পরীক্ষায় আমার জন্য উভয়ের জন্য ১০০,০০০,০০০ এর মধ্যে সন্ধান করা হয়েছে ,000
পরীক্ষার কোড:
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");
}
}