Eu só quero as chaves e não os valores de um dicionário.
Ainda não consegui obter nenhum código para fazer isso. Usar outra matriz provou ser muito trabalhoso, pois eu também uso o remove.
Como obtenho uma lista de chaves em um dicionário?
Eu só quero as chaves e não os valores de um dicionário.
Ainda não consegui obter nenhum código para fazer isso. Usar outra matriz provou ser muito trabalhoso, pois eu também uso o remove.
Como obtenho uma lista de chaves em um dicionário?
Respostas:
List<string> keyList = new List<string>(this.yourDictionary.Keys);
yourDictionary
faz parte do objeto, derivado na função ou no nome de um parâmetro.
Você deve conseguir apenas olhar para .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);
}
Para obter a lista de todas as chaves
using System.Linq;
List<String> myKeys = myDict.Keys.ToList();
O System.Linq é suportado no .Net framework 3.5 ou superior. Consulte os links abaixo se você tiver algum problema ao usar o System.Linq
using System.Linq;
eu preciso saber quais respostas ignorar. Desculpe :)
.ToList()
estava jogando um erro quando eu tinha usado tantas outras vezes, então eu vim aqui à procura de uma resposta e eu percebi o arquivo que eu estava trabalhando em não ter using System.Linq
:)
Dictionary<string, object>.KeyCollection' does not contain a definition for 'ToList'
A resposta de Marc Gravell deve funcionar para você. myDictionary.Keys
devolve um objecto que implementa ICollection<TKey>
, IEnumerable<TKey>
e os seus homólogos não-genéricos.
Eu só queria acrescentar que se você planeja acessar o valor também, pode percorrer o dicionário como este (exemplo modificado):
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);
}
A pergunta é um pouco difícil de entender, mas acho que o problema é que você está tentando remover elementos do Dicionário enquanto itera sobre as teclas. Acho que nesse caso você não tem escolha a não ser usar uma segunda matriz.
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
Se você pode usar listas e dicionários genéricos em vez de um ArrayList, eu usaria, no entanto, o acima deve funcionar.
Não acredito em todas essas respostas complicadas. Supondo que a chave seja do tipo: string (ou use 'var' se você for um desenvolvedor preguiçoso): -
List<string> listOfKeys = theCollection.Keys.ToList();
using System.linq;
Ou assim:
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);
}