如何获取字典中的键列表?

时间:2009-08-14 08:54:42

标签: c# list dictionary

我从来没有得到任何我尝试过的代码。

我想要键而不是值(还)。事实证明使用另一个数组太多了,因为我也使用了删除。

9 个答案:

答案 0 :(得分:267)

List<string> keyList = new List<string>(this.yourDictionary.Keys);

答案 1 :(得分:65)

您应该只能看.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);
    }

答案 2 :(得分:36)

获取所有密钥的列表

using System.Linq;
List<String> myKeys = myDict.Keys.ToList();

.Net framework 3.5或更高版本支持System.Linq。如果您在使用System.Linq

时遇到任何问题,请参阅以下链接

Visual Studio Does not recognize System.Linq

System.Linq Namespace

答案 3 :(得分:12)

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);
}

答案 4 :(得分:3)

这个问题有点难以理解,但我猜测问题是你在迭代密钥时试图从字典中删除元素。我想在那种情况下你别无选择,只能使用第二个阵列。

ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
  if (<your condition here>)
  {
    lDict.Remove(lKey);
  }
}

如果您可以使用通用列表和字典而不是ArrayList,那么我会,但上面应该可以正常工作。

答案 5 :(得分:2)

我无法相信所有这些错综复杂的答案。假设键的类型为:string(如果你是一个懒惰的开发人员,则使用'var'): -

List<string> listOfKeys = theCollection.Keys.ToList();

答案 6 :(得分:0)

或者像这样:

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);
}

答案 7 :(得分:0)

对于混合词典,我使用它:

List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());

答案 8 :(得分:-2)

我经常用它来获取字典中的键和值:(VB.Net)

 For Each kv As KeyValuePair(Of String, Integer) In layerList

 Next

(layerList的类型为Dictionary(Of String,Integer))