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.
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.
Hanya untuk berpegang teguh pada spesifikasi asli Anda untuk Kamus, saya menyelipkan beberapa kode dan menghasilkan:
Dictionary<string, string> d = new Dictionary<string, string>();
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.