Я хочу только ключи, а не значения словаря.
Я не смог получить код для этого еще. Использование другого массива оказалось слишком трудоемким, так как я использую также remove.
Как получить список ключей в словаре?
Я хочу только ключи, а не значения словаря.
Я не смог получить код для этого еще. Использование другого массива оказалось слишком трудоемким, так как я использую также remove.
Как получить список ключей в словаре?
Ответы:
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'
Ответ Марка Гравелла должен сработать для вас. 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);
}