c# - resueltos - Cómo verificar si existe una clave, un par de valores en un Diccionario
lista de diccionarios python (9)
Bueno, el par no puede existir si la clave no existe ... así que busque el valor asociado con la clave y verifique si ese es el valor que estaba buscando. Así por ejemplo:
// Could be generic of course, but let''s keep things simple...
public bool ContainsKeyValue(Dictionary<string, int> dictionary,
string expectedKey, int expectedValue)
{
int actualValue;
if (!dictionary.TryGetValue(expectedKey, out actualValue))
{
return false;
}
return actualValue == expectedValue;
}
O un poco más "hábilmente" (generalmente algo para evitar ...):
public bool ContainsKeyValue(Dictionary<string, int> dictionary,
string expectedKey, int expectedValue)
{
int actualValue;
return dictionary.TryGetValue(expectedKey, out actualValue) &&
actualValue == expectedValue;
}
¿Cómo se puede verificar si existe un par clave / valor en un Diccionario <>? Puedo verificar si existe una clave o un valor, usando ContainsKey
y ContainsValue
, pero no estoy seguro de cómo verificar si existe un par de clave / valor.
Gracias
Como algo asi
bool exists = dict.ContainsKey("key") ? dict["key"] == "value" : false;
Por favor verifique con el siguiente código
var dColList = new Dictionary<string, int>();
if (!dColList.Contains(new KeyValuePair<string, int>(col.Id,col.RowId)))
{}
Gracias, Mahesh G
Primero verifica si existe la clave, si es así, obtienes el valor de esta clave y lo comparas con el valor que estás probando ... Si son iguales, tu Diccionario contiene el par
Puedes hacer esto usando dictionary.TryGetValue .
Dictionary<string, bool> clients = new Dictionary<string, bool>();
clients.Add("abc", true);
clients.Add("abc2", true);
clients.Add("abc3", false);
clients.Add("abc4", true);
bool isValid = false;
if (clients.TryGetValue("abc3", out isValid)==false||isValid == false)
{
Console.WriteLine(isValid);
}
else
{
Console.WriteLine(isValid);
}
En el código anterior, si hay una condición, hay dos secciones, la primera para verificar la clave tiene valor y la segunda para comparar el valor real con el valor esperado.
First Section{clients.TryGetValue("abc3", out isValid)==false}||Second Section{isValid == false}
Un diccionario solo admite un valor por clave, por lo que:
// key = the key you are looking for
// value = the value you are looking for
YourValueType found;
if(dictionary.TryGetValue(key, out found) && found == value) {
// key/value pair exists
}
Versión genérica de la respuesta de Jon Skeet .
public bool ContainsKeyValue<TKey, TVal>(Dictionary<TKey, TVal> dictionnaire,
TKey expectedKey,
TVal expectedValue) where TVal : IComparable
{
TVal actualValue;
if (!dictionnaire.TryGetValue(expectedKey, out actualValue))
{
return false;
}
return actualValue.CompareTo(expectedValue) == 0;
}
Método de extensión simple y genérico
Aquí hay un método de extensión genérico rápido que agrega un método ContainsPair()
a cualquier IDictionary
:
public static bool ContainsPair<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
TKey key,
TValue value)
{
return dictionary.TryGetValue(key, out var found) && found.Equals(value);
}
Esto te permite hacer comprobaciones contra diccionarios como este:
if( myDict.ContainsPair("car", "mustang") ) { ... } // NOTE: this is not case-insensitive
Cheque insensible a mayúsculas
Cuando trabaje con claves basadas en cadenas, puede hacer que el Dictionary
no distinga entre mayúsculas y minúsculas con respecto a sus claves al crearlo con un comparador como StringComparer.OrdinalIgnoreCase
cuando se construye el diccionario.
Sin embargo, para hacer que la comparación de valores sea insensible (asumiendo que los valores también son cadenas), puede usar esta versión que agrega un parámetro IComparer
:
public static bool ContainsPair<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
TKey key,
TValue value,
IComparer<TValue> comparer)
{
return dictionary.TryGetValue(key, out var found) && comparer.Compare(found, value) == 0;
}
if (myDic.ContainsKey(testKey) && myDic[testKey].Equals(testValue))
return true;