c# - tipos - Encontrar un valor ya existente en el par de valores clave
tipos de datos por valor y referencia (5)
¿Sus necesidades describen exactamente el diseño de Dictionary
s?
Dictionary<string, string> openWith =
new Dictionary<string, string>();
// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
// If a key does not exist, setting the indexer for that key
// adds a new key/value pair.
openWith["doc"] = "winword.exe";
Estoy almacenando una cadena y un valor int en el par de valores clave.
var list = new List<KeyValuePair<string, int>>();
Al agregar, necesito verificar si la cadena (Clave) ya existe en la lista, si existe, necesito agregarla a Valor en lugar de agregar una nueva clave.
¿Cómo comprobar y añadir?
En lugar de Lista, puede usar el Dictionary y verificar si contiene la clave y luego agregar el nuevo valor a la clave existente
int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + newValue;
Por supuesto, el diccionario es preferible en su caso. No puede modificar el valor de la KeyValue<string,int>
ya que es inmutable.
Pero incluso si aún desea utilizar List<KeyValuePair<string, int>>();
. Puede usar IEqualityComparer<KeyValuePair<string, int>>
. El código será como
public class KeyComparer : IEqualityComparer<KeyValuePair<string, int>>
{
public bool Equals(KeyValuePair<string, int> x, KeyValuePair<string, int> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, int> obj)
{
return obj.Key.GetHashCode();
}
}
Y usalo en Contiene como
var list = new List<KeyValuePair<string, int>>();
string checkKey = "my string";
if (list.Contains(new KeyValuePair<string, int>(checkKey, int.MinValue), new KeyComparer()))
{
KeyValuePair<string, int> item = list.Find((lItem) => lItem.Key.Equals(checkKey));
list.Remove(item);
list.Add(new KeyValuePair<string, int>("checkKey", int.MinValue));// add new value
}
Lo que no suena bien.
Espero que esta información ayude ..
Si necesita usar la lista, debe buscar cada una de las listas y buscar las claves. Simplemente, puedes usar la tabla hash.
usar dictonary Diccionario en C # y te sugiero que leas este post Dictonary en .net
Dictionary<string, int> dictionary =
new Dictionary<string, int>();
dictionary.Add("cat", 2);
dictionary.Add("dog", 1);
dictionary.Add("llama", 0);
dictionary.Add("iguana", -1);
verificar. utilizar ContainsKey ContainsKey
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + yourValue;