Я никогда не получал никакого кода, который пытался использовать.
Мне нужны ключи, а не значения (пока). Использование другого массива оказалось слишком большим, поскольку я также использую remove.
Я никогда не получал никакого кода, который пытался использовать.
Мне нужны ключи, а не значения (пока). Использование другого массива оказалось слишком большим, поскольку я также использую remove.
List<string> keyList = new List<string>(this.yourDictionary.Keys);
Вы можете просто посмотреть .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);
}
Чтобы получить список всех клавиш
List<String> myKeys = myDict.Keys.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, я бы, однако, это должно было просто работать.
Я думаю, что самый опрятный способ - использовать LINQ:
Dictionary<string, int> data = new Dictionary<string, int>();
data.Select(x=>x.Key).ToList();
Или вот так:
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 имеет тип Dictionary (Of String, Integer))