Como obtenho uma chave de dicionário por valor em c #?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Eu quero algo como isto:
getByValueKey(string value);
getByValueKey("one")
deve ser retorno "1"
.
Qual é a melhor maneira de fazer isso? Talvez HashTable, SortedLists?
c#
dictionary
loviji
fonte
fonte
Respostas:
Os valores não necessariamente precisam ser exclusivos, portanto, você deve fazer uma pesquisa. Você pode fazer algo assim:
Se os valores forem exclusivos e forem inseridos com menos frequência que a leitura, crie um dicionário inverso em que os valores sejam chaves e as chaves sejam valores.
fonte
KeyValuePair<Tkey,Tvalue>
é uma estrutura, portanto, um tipo de valor, nunca pode sernull
.FirstOrDefault
retornará uma instância em que todos os campos são inicializados com seu valor padrão (comonull
para strings ou 0 para ints). Então você não receberá uma exceção. Mas você também não sabe se encontrou um valor, portanto, esta resposta não cobre o caso de o valor não existir.Você poderia fazer isso:
KeyValuePair<TKey, TValue>
's' no dicionário (que será um sucesso considerável se você tiver várias entradas no dicionário)Use o método 1 se o desempenho não for uma consideração, use o método 2 se a memória não for uma consideração.
Além disso, todas as chaves devem ser exclusivas, mas os valores não precisam ser exclusivos. Você pode ter mais de uma chave com o valor especificado.
Existe algum motivo para você não poder reverter a relação de valor-chave?
fonte
Eu estava em uma situação em que a ligação do Linq não estava disponível e tive que expandir o lambda explicitamente. Isso resultou em uma função simples:
Chame da seguinte forma:
Funciona no .NET 2.0 e em outros ambientes limitados.
fonte
talvez algo como isto:
fonte
Eu criei uma classe de pesquisa dupla:
fonte
Values.ToList () converte os valores do dicionário em uma lista de objetos. IndexOf ("one") pesquisa sua nova lista procurando "one" e retorna o índice que corresponderia ao índice do par Chave / Valor no dicionário.
Este método não se importa com as chaves do dicionário, simplesmente retorna o índice do valor que você está procurando.
Lembre-se de que pode haver mais de um valor "um" no seu dicionário. E é por isso que não existe um método "obter chave".
fonte
O código abaixo funciona apenas se ele contém dados de valor exclusivos
fonte
Eu tenho uma maneira muito simples de fazer isso. Funcionou perfeito para mim.
fonte