Ubah kamus menjadi daftar koleksi di C #


93

Saya mengalami masalah saat mencoba mengubah kamus menjadi daftar.

Contoh jika saya memiliki kamus dengan template string sebagai kunci dan string sebagai nilai. Kemudian saya ingin mengubah kunci kamus menjadi koleksi daftar sebagai string.

Dictionary<string, string> dicNumber = new Dictionary<string, string>();
List<string> listNumber = new List<string>();

dicNumber.Add("1", "First");
dicNumber.Add("2", "Second");
dicNumber.Add("3", "Third");

// So the code may something look like this
//listNumber = dicNumber.Select(??????);

5
Apakah Anda meminta daftar kunci dari kamus? Jika demikian, ada Properti Kunci di Kamus yang akan memberi Anda itu.
Brian Rasmussen

Jawaban:


176

Untuk mengonversi Kunci menjadi Daftarnya sendiri:

listNumber = dicNumber.Select(kvp => kvp.Key).ToList();

Atau Anda dapat mempersingkatnya dan bahkan tidak perlu repot-repot menggunakan pilih:

listNumber = dicNumber.Keys.ToList();

@ Brian - Saya sudah sampai di sana dalam suntingan saya. Saya ingin menunjukkan metode pemilihan terlebih dahulu karena itulah yang ditanyakan OP dan kemudian menunjukkan alternatifnya. :-)
Justin Niessner

Jadi saya pikir, jadi saya menghapus komentar saya.
Brian Rasmussen

1
ini sangat membantu. Saya perlu menerapkan .Where (...) ke dikt sebelum mengembalikan kunci, tetapi metode itu tidak mengembalikan kamus, jadi saya tidak dapat mengakses properti Keys. menggunakan pilihan ini setelah tempat yang berhasil dengan baik
Martín Coll

22

Kalau tidak:

var keys = new List<string>(dicNumber.Keys);

4
Bekerja dengan .NET Compact Framework 2.0 (jadi tidak ada Linq) ini adalah pilihan terbaik bagi saya.
Michael Murphy

Jika Anda tidak dapat menggunakan LINQ, opsi ini tampaknya yang terbaik.
pengguna2000950

17

Jika Anda ingin menggunakan Linq maka Anda dapat menggunakan potongan berikut:

var listNumber = dicNumber.Keys.ToList();

9

Jika Anda ingin mengonversi Kunci:

List<string> listNumber = dicNumber.Keys.ToList();

lain jika Anda ingin mengubah Nilai:

List<string> listNumber = dicNumber.Values.ToList();

Ini akan berfungsi, tetapi mungkin tidak dalam urutan yang Anda harapkan, bahkan dikt yang dipesan oleh kunci sebelumnya, dict. Nilai tidak ...
BooNonMooN


3

Jika Anda ingin meneruskan koleksi kunci kamus ke dalam satu argumen metode.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.