Gdy otrzymujesz klucz ze Słownika, ale nie masz pewności, zwykle używasz TryGetValue
zamiast ContainsKey
+ programu pobierającego indeks, aby uniknąć podwójnego kliknięcia klucza. Innymi słowy, to:Najlepszy sposób sprawdzenia, czy klucz istnieje w słowniku przed dodaniem?
string password;
if (accounts.TryGetValue(username, out password))
{
// use the password
}
będzie wolał to:
if (accounts.ContainsKey(username))
{
string password = accounts[username];
}
Co jeśli chciałem sprawdzić, czy klucz istniała już przed ustawieniem go na wartości? Na przykład, chciałbym sprawdzić, czy nazwa istniała przed zastąpieniem go nowym hasłem:
if (!accounts.ContainsKey(username))
{
accounts.Add(username, password);
}
else
{
Console.WriteLine("Username is taken!");
}
vs
// this doesn't exist
if (!accounts.TrySetValue(username, password))
{
Console.WriteLine("Username is taken!");
}
jest tam więcej wydajnych alternatywą ContainsKey
i Add
że robi to ?
var hasło = keyValue.Where (entry => entry.Key.Zawiera ("hasło")) . Wybierz (element => item.Key) .FirstOrDefault(); –
@SanjeevS Dziękuję za odpowiedź, ale LINQ byłby o wiele bardziej nieefektywny niż rozwiązanie awaryjne, które napisałem powyżej. –
Nie jestem pewien, czy można tu wiele zyskać, ponieważ słownik jest wewnętrznie oparty na tabeli mieszania, tak że uzyskanie wartości kluczem (np. Za pomocą indeksera) ma złożoność O (1). – Grx70