แปลงพจนานุกรมเป็นรายการคอลเลกชันใน C #


98

ฉันมีปัญหาเมื่อพยายามแปลงพจนานุกรมเป็นรายการ

ตัวอย่างถ้าฉันมีพจนานุกรมที่มีสตริงแม่แบบเป็นคีย์และสตริงเป็นค่า จากนั้นฉันต้องการแปลงคีย์พจนานุกรมเป็นรายการคอลเลกชันเป็นสตริง

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
คุณกำลังขอรายการคีย์จากพจนานุกรมหรือไม่? ถ้าเป็นเช่นนั้นมีคุณสมบัติคีย์ในพจนานุกรมที่จะให้สิ่งนั้นแก่คุณ
Brian Rasmussen

คำตอบ:


182

ในการแปลงคีย์เป็นรายการของตัวเอง:

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

หรือคุณสามารถย่อให้สั้นลงและไม่ต้องกังวลกับการใช้ select:

listNumber = dicNumber.Keys.ToList();

@ ไบรอัน - ฉันไปถึงที่นั่นในการแก้ไขของฉัน ฉันต้องการแสดงวิธีการเลือกก่อนเนื่องจากเป็นสิ่งที่ OP ถามเกี่ยวกับจากนั้นจึงแสดงทางเลือกอื่น :-)
Justin Niessner

ดังนั้นฉันคิดได้ดังนั้นฉันจึงลบความคิดเห็นของฉัน
Brian Rasmussen

1
นี่เป็นประโยชน์จริงๆ ฉันจำเป็นต้องสมัครโดยที่ (... ) ไปยัง dict ก่อนที่จะคืนคีย์ แต่วิธีนั้นไม่ส่งคืนพจนานุกรมดังนั้นฉันจึงไม่สามารถเข้าถึงคุณสมบัติ Keys ได้ ใช้ตัวเลือกนี้หลังจากที่ทำงานได้ดี
Martín Coll

24

อีกทางหนึ่ง:

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

4
การทำงานกับ. NET Compact Framework 2.0 (ดังนั้นจึงไม่มี Linq) นี่เป็นตัวเลือกที่ดีที่สุดสำหรับฉัน
Michael Murphy

หากคุณไม่สามารถใช้ LINQ ตัวเลือกนี้ดูเหมือนจะดีที่สุด
user2000950


10

หากคุณต้องการแปลงคีย์:

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

อื่นถ้าคุณต้องการแปลงค่า:

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

สิ่งนี้จะใช้งานได้ แต่อาจไม่เป็นไปตามลำดับที่คุณคาดหวังแม้แต่คำสั่งก็ถูกสั่งด้วยคีย์ก่อนหน้านี้ค่าก็ไม่ได้ ...
BooNonMooN


3

หากคุณต้องการส่งผ่านคอลเลกชันคีย์พจนานุกรมไปยังอาร์กิวเมนต์เมธอดเดียว

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.