Как получить список ключей в словаре?

Я никогда не получал никакого кода, который пытался использовать.

Мне нужны ключи, а не значения (пока). Использование другого массива оказалось слишком большим, поскольку я также использую remove.

Ответ 1

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

Ответ 2

Вы можете просто посмотреть .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);
    }

Ответ 3

Чтобы получить список всех клавиш

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

Ответ 4

Ответ Марка Гравелла должен работать на вас. 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);
}

Ответ 5

Вопрос немного сложно понять, но я предполагаю, что проблема в том, что вы пытаетесь удалить элементы из Словаря, пока вы перебираете ключи. Я думаю, в этом случае у вас нет другого выбора, кроме как использовать второй массив.

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

Если вы можете использовать общие списки и словари вместо ArrayList, я бы, однако, это должно было просто работать.

Ответ 6

Я думаю, что самый опрятный способ - использовать LINQ:

Dictionary<string, int> data = new Dictionary<string, int>(); data.Select(x=>x.Key).ToList();

Ответ 7

Или вот так:

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

Ответ 8

Для гибридного словаря я использую это:

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

Ответ 9

Я часто использовал это, чтобы получить ключ и значение внутри словаря: (VB.Net)

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

 Next

(layerList имеет тип Dictionary (Of String, Integer))