Bagaimana cara mendapatkan kunci Kamus berdasarkan nilai dalam C #?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Saya ingin sesuatu seperti ini:
getByValueKey(string value);
getByValueKey("one")
harus kembali "1"
.
Apa cara terbaik untuk melakukan ini? Mungkin HashTable, SortedLists?
c#
dictionary
loviji
sumber
sumber
Jawaban:
Nilai tidak harus harus unik sehingga Anda harus melakukan pencarian. Anda dapat melakukan sesuatu seperti ini:
Jika nilai unik dan disisipkan lebih jarang dari baca, kemudian buat kamus terbalik di mana nilai adalah kunci dan kunci adalah nilai.
sumber
KeyValuePair<Tkey,Tvalue>
struct, jadi tipe nilai, itu tidak akan pernah bisanull
.FirstOrDefault
akan mengembalikan instance di mana semua bidang diinisialisasi dengan nilai default-nya (sepertinull
untuk string atau 0 untuk ints). Jadi Anda tidak akan mendapatkan pengecualian. Tetapi Anda juga tidak tahu apakah Anda telah menemukan nilai, jadi jawaban ini tidak mencakup kasus bahwa nilainya tidak ada.Anda bisa melakukannya:
KeyValuePair<TKey, TValue>
di kamus (yang akan menjadi hit kinerja yang cukup besar jika Anda memiliki sejumlah entri dalam kamus)Gunakan Metode 1 jika kinerja bukan pertimbangan, gunakan Metode 2 jika memori bukan pertimbangan.
Selain itu, semua kunci harus unik, tetapi nilainya tidak harus unik. Anda mungkin memiliki lebih dari satu kunci dengan nilai yang ditentukan.
Apakah ada alasan Anda tidak dapat membalikkan hubungan nilai kunci?
sumber
Saya berada dalam situasi di mana pengikatan Linq tidak tersedia dan harus memperluas lambda secara eksplisit. Ini menghasilkan fungsi sederhana:
Sebut saja seperti berikut:
Bekerja pada .NET 2.0 dan di lingkungan terbatas lainnya.
sumber
mungkin kira-kira seperti ini:
sumber
Saya telah membuat kelas pencarian ganda:
sumber
Values.ToList () mengubah nilai kamus Anda menjadi Daftar objek. IndexOf ("satu") mencari Daftar baru Anda mencari "satu" dan mengembalikan Indeks yang akan cocok dengan indeks pasangan Kunci / Nilai dalam kamus.
Metode ini tidak peduli dengan kunci kamus, itu hanya mengembalikan indeks nilai yang Anda cari.
Ingatlah bahwa mungkin ada lebih dari satu nilai "satu" dalam kamus Anda. Dan itulah alasan mengapa tidak ada metode "dapatkan kunci".
sumber
Kode di bawah ini hanya berfungsi jika berisi Data Nilai Unik
sumber
Saya punya cara yang sangat sederhana untuk melakukan ini. Itu bekerja dengan sempurna bagi saya.
sumber