Ini mungkin tampak aneh untuk dilakukan tetapi mengabaikannya, adakah cara ringkas yang bagus untuk mengonversi Daftar ke Kamus di mana setiap Pasangan Nilai Kunci dalam Kamus hanyalah setiap string dalam Daftar. yaitu
List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3
Saya telah melakukan banyak pencarian dan ada lusinan contoh di Stackoverflow yang melakukannya ke arah yang berlawanan tetapi tidak dengan cara ini.
Alasan untuk melakukan ini adalah saya memiliki dua komponen bagian ketiga dan mengubahnya di luar kendali saya. Satu mengembalikan daftar alamat email sebagai Daftar dan yang lainnya mengirim email di mana parameter Ke adalah Kamus. Kunci kamusnya adalah alamat email dan nilainya adalah nama aslinya. Namun, saya tidak tahu nama aslinya tetapi masih berfungsi jika Anda juga menyetel nama asli ke alamat email. Oleh karena itu mengapa saya ingin mengonversi Daftar ke Kamus. Ada banyak cara untuk melakukan ini. Perulangan foreach pada daftar yang menambahkan kvp ke kamus. Tapi saya suka kode singkat dan bertanya-tanya apakah ada solusi baris tunggal.
sumber
Jawaban:
Coba ini:
Lambda pertama memungkinkan Anda memilih kunci, yang kedua memilih nilainya.
Anda dapat bermain dengannya dan membuat nilai berbeda dari kunci, seperti ini:
Jika daftar Anda berisi duplikat, tambahkan
Distinct()
seperti ini:EDIT Untuk mengomentari alasan yang valid, saya pikir satu-satunya alasan yang dapat valid untuk konversi seperti ini adalah bahwa pada titik tertentu kunci dan nilai dalam kamus yang dihasilkan akan menyimpang. Misalnya, Anda akan melakukan konversi awal, lalu mengganti beberapa nilai dengan yang lain. Jika kunci dan nilainya selalu sama,
HashSet<String>
akan memberikan kesesuaian yang lebih baik untuk situasi Anda:sumber
.Distinct()
setelahlist
untuk menghindari ini.Gunakan ini:
Lihat MSDN untuk info lebih lanjut.
Seperti yang ditunjukkan Pranay di komentar, ini akan gagal jika item ada dalam daftar beberapa kali.
Bergantung pada kebutuhan spesifik Anda, Anda dapat menggunakan
var dict = list.Distinct().ToDictionary(x => x);
untuk mendapatkan kamus item yang berbeda atau Anda dapat menggunakanToLookup
sebagai gantinya:Ini akan mengembalikan
ILookup<string, string>
yang pada dasarnya sama denganIDictionary<string, IEnumerable<string>>
, jadi Anda akan memiliki daftar kunci yang berbeda dengan setiap contoh string di bawahnya.sumber
Dengan menggunakan
ToDictionary
:Jika ada kemungkinan string apa pun dapat diulang, lakukan
Distinct
panggilan terlebih dahulu pada daftar (untuk menghapus duplikat), atau gunakanToLookup
yang memungkinkan beberapa nilai per kunci.sumber
Kamu bisa memakai:
sumber
EDIT
Cara lain untuk menangani duplikat adalah Anda dapat melakukan seperti ini
atau
cara mudah untuk melakukannya adalah
tetapi pastikan tidak ada string yang berulang ... lagi-lagi karena kode di atas tidak akan berfungsi untuk Anda
Jika ada string yang berulang daripada lebih baik melakukan seperti ini
sumber