Bagaimana cara mendapatkan elemen ke-n dari Kamus?

cipher = new Dictionary<char,int>;
cipher.Add( 'a', 324 );
cipher.Add( 'b', 553 );
cipher.Add( 'c', 915 );

Bagaimana cara mendapatkan elemen kedua? Misalnya, saya ingin sesuatu seperti:

KeyValuePair pair = cipher[1]

Di mana pasangan berisi ( 'b', 553 )


Berdasarkan saran koperasi menggunakan Daftar, semuanya berjalan dengan baik:

List<KeyValuePair<char, int>> cipher = new List<KeyValuePair<char, int>>();
cipher.Add( new KeyValuePair<char, int>( 'a', 324 ) );
cipher.Add( new KeyValuePair<char, int>( 'b', 553 ) );
cipher.Add( new KeyValuePair<char, int>( 'c', 915 ) );

KeyValuePair<char, int> pair = cipher[ 1 ];

Dengan asumsi bahwa saya benar bahwa item tetap berada dalam daftar sesuai urutan penambahannya, saya yakin bahwa saya bisa menggunakan List dan bukan SortedList seperti yang disarankan.

Larutan

Masalahnya adalah Kamus tidak diurutkan. Yang Anda inginkan adalah SortedList, yang memungkinkan Anda untuk mendapatkan nilai berdasarkan indeks dan juga kunci, meskipun Anda mungkin perlu menentukan pembanding Anda sendiri di konstruktor untuk mendapatkan pengurutan yang Anda inginkan. Anda kemudian dapat mengakses daftar terurut dari Kunci dan Nilai, dan menggunakan berbagai kombinasi metode IndexOfKey/IndexOfValue sesuai kebutuhan.

Komentar (4)

seperti ini:

int n = 0;
int nthValue = cipher[cipher.Keys.ToList()[n]];

perhatikan bahwa Anda juga memerlukan referensi ke Linq di bagian atas halaman Anda...

using System.Linq;
Komentar (4)

Hanya untuk berpegang teguh pada spesifikasi asli Anda untuk Kamus, saya menyelipkan beberapa kode dan menghasilkan:

Dictionary d = new Dictionary();

d.Add("a", "apple");
d.Add("b", "ball");
d.Add("c", "cat");
d.Add("d", "dog");

int t = 0;
foreach (string s in d.Values)
{
    t++;
    if (t == 2) Console.WriteLine(s);
}

dan tampaknya menulis item kedua ("bola &") ke konsol secara berulang-ulang. Jika Anda membungkusnya menjadi pemanggilan metode untuk mendapatkan elemen ke-n, mungkin akan berhasil. Akan tetapi hal ini cukup jelek. Jika Anda dapat menggunakan SortedList, seperti yang disarankan oleh @thecoop, Anda akan lebih baik.

Komentar (0)