ฉันต้องการแค่คีย์เท่านั้นไม่ใช่ค่าของพจนานุกรม
ฉันยังไม่สามารถรับรหัสเพื่อทำสิ่งนี้ได้ การใช้อาร์เรย์อื่นที่พิสูจน์แล้วว่าทำงานได้มากเกินไปเมื่อฉันใช้การลบ
ฉันจะรับรายชื่อของคีย์ในพจนานุกรมได้อย่างไร
ฉันต้องการแค่คีย์เท่านั้นไม่ใช่ค่าของพจนานุกรม
ฉันยังไม่สามารถรับรหัสเพื่อทำสิ่งนี้ได้ การใช้อาร์เรย์อื่นที่พิสูจน์แล้วว่าทำงานได้มากเกินไปเมื่อฉันใช้การลบ
ฉันจะรับรายชื่อของคีย์ในพจนานุกรมได้อย่างไร
คำตอบ:
List<string> keyList = new List<string>(this.yourDictionary.Keys);
yourDictionary
เป็นส่วนหนึ่งของวัตถุที่ได้มาในฟังก์ชั่นหรือชื่อพารามิเตอร์
คุณควรจะสามารถดู.Keys
:
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);
foreach (string key in data.Keys)
{
Console.WriteLine(key);
}
เพื่อรับรายการคีย์ทั้งหมด
using System.Linq;
List<String> myKeys = myDict.Keys.ToList();
System.Linq ได้รับการสนับสนุนใน. Net Framework 3.5 หรือสูงกว่า ดูลิงค์ด้านล่างหากคุณประสบปัญหาใด ๆ ในการใช้ System.Linq
using System.Linq;
ฉันจำเป็นต้องรู้คำตอบที่จะไม่สนใจ ขออภัย :)
.ToList()
ถูกขว้างปาข้อผิดพลาดเมื่อฉันได้ใช้มันครั้งอื่น ๆ อีกมากมายดังนั้นผมมาที่นี่มองหาคำตอบและฉันรู้ว่าไฟล์ที่ผมทำงานในไม่ได้มีusing System.Linq
:)
Dictionary<string, object>.KeyCollection' does not contain a definition for 'ToList'
คำตอบของ Marc Gravell น่าจะเหมาะกับคุณ myDictionary.Keys
ผลตอบแทนที่ได้วัตถุที่นำไปปฏิบัติICollection<TKey>
, IEnumerable<TKey>
และลูกน้องที่ไม่ใช่ทั่วไปของพวกเขา
ฉันแค่อยากจะเพิ่มว่าถ้าคุณวางแผนที่จะเข้าถึงค่าเช่นกันคุณสามารถวนดูพจนานุกรมเช่นนี้ (ตัวอย่างที่แก้ไขแล้ว):
Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);
foreach (KeyValuePair<string, int> item in data)
{
Console.WriteLine(item.Key + ": " + item.Value);
}
คำถามเป็นเรื่องยุ่งยากเล็กน้อยที่จะเข้าใจ แต่ฉันเดาว่าปัญหาคือคุณกำลังพยายามลบองค์ประกอบออกจากพจนานุกรมในขณะที่คุณทำซ้ำแป้น ฉันคิดว่าในกรณีนี้คุณไม่มีทางเลือกนอกจากใช้อาเรย์ที่สอง
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
หากคุณสามารถใช้รายการและพจนานุกรมทั่วไปแทนที่จะเป็น ArrayList ฉันก็จะทำอย่างไรก็ตามสิ่งที่กล่าวมาข้างต้นควรจะใช้ได้
ฉันไม่อยากจะเชื่อคำตอบที่ซับซ้อนเหล่านี้ทั้งหมด สมมติว่าคีย์เป็นประเภท: string (หรือใช้ 'var' หากคุณเป็นนักพัฒนาที่ขี้เกียจ): -
List<string> listOfKeys = theCollection.Keys.ToList();
using System.linq;
หรือเช่นนี้
List< KeyValuePair< string, int > > theList =
new List< KeyValuePair< string,int > >(this.yourDictionary);
for ( int i = 0; i < theList.Count; i++)
{
// the key
Console.WriteLine(theList[i].Key);
}
สำหรับพจนานุกรมไฮบริดฉันใช้สิ่งนี้:
List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());
ฉันมักจะใช้สิ่งนี้เพื่อรับคีย์และค่าภายในพจนานุกรม: (VB.Net)
For Each kv As KeyValuePair(Of String, Integer) In layerList
Next
(layerList เป็นประเภทพจนานุกรม (Of String, จำนวนเต็ม))