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(??????);
Edy Cu
sumber
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();
Justin Niessner
sumber
@ 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);
stuartd
sumber
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();
Pop Catalin
sumber
9

Jika Anda ingin mengonversi Kunci:

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

lain jika Anda ingin mengubah Nilai:

List<string> listNumber = dicNumber.Values.ToList();
daniele3004
sumber
Ini akan berfungsi, tetapi mungkin tidak dalam urutan yang Anda harapkan, bahkan dikt yang dipesan oleh kunci sebelumnya, dict. Nilai tidak ...
BooNonMooN
4
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}
penjelajah
sumber
Mengapa tidak pada akhirnya :)
Arman McHitarian
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
}
arun
sumber