tamaño resueltos objeto lista elementos ejercicios diccionarios diccionario agregar c# .net data-structures dictionary

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;