Saat pengecualian bukan opsi, buka Pencarian
Jika Anda mencoba untuk mendapatkan struktur seefisien Dictionary
tapi Anda tidak tahu pasti tidak ada kunci duplikat dalam input, Lookup
lebih aman.
Seperti disebutkan dalam jawaban lain, itu juga mendukung kunci nol, dan mengembalikan selalu hasil yang valid ketika ditanyai dengan data yang sewenang-wenang, sehingga nampak lebih tangguh terhadap input yang tidak dikenal (kurang rentan daripada Kamus untuk meningkatkan pengecualian).
Dan itu benar terutama jika Anda membandingkannya dengan System.Linq.Enumerable.ToDictionary
fungsi:
// won't throw
new[] { 1, 1 }.ToLookup(x => x);
// System.ArgumentException: An item with the same key has already been added.
new[] { 1, 1 }.ToDictionary(x => x);
Alternatifnya adalah menulis kode manajemen kunci duplikat Anda sendiri di dalam sebuah foreach
loop.
Pertimbangan kinerja, Kamus: pemenang yang jelas
Jika Anda tidak memerlukan daftar dan Anda akan mengelola sejumlah besar item, Dictionary
(atau bahkan struktur khusus Anda sendiri) akan lebih efisien:
Stopwatch stopwatch = new Stopwatch();
var list = new List<string>();
for (int i = 0; i < 5000000; ++i)
{
list.Add(i.ToString());
}
stopwatch.Start();
var lookup = list.ToLookup(x => x);
stopwatch.Stop();
Console.WriteLine("Creation: " + stopwatch.Elapsed);
// ... Same but for ToDictionary
var lookup = list.ToDictionary(x => x);
// ...
Karena Lookup
harus mempertahankan daftar item untuk setiap tombol, itu lebih lambat dari Kamus (sekitar 3x lebih lambat untuk sejumlah besar item)
Kecepatan pencarian: Penciptaan: 00: 00: 01.5760444
Kecepatan kamus: Pembuatan: 00: 00: 00.4418833