Je stocke une chaîne et une valeur int dans une paire de valeurs clés.
var list = new List<KeyValuePair<string, int>>();
Lors de l'ajout, je dois vérifier si la chaîne (Key) existe déjà dans la liste, si elle existe, je dois l'ajouter à Value au lieu d'ajouter une nouvelle clé.
Comment vérifier et ajouter?
Au lieu de List, vous pouvez utiliser Dictionary et vérifier si elle contient la clé puis ajouter la nouvelle valeur à la clé existante
int newValue = 10;
Dictionary<string, int> dictionary = new Dictionary<string, int>();
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + newValue;
utilise le dictionnaire. Dictionnaire en C # et je vous suggère de lire cet article Dictionnaire 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);
vérifier. utiliser ContainsKey ContainsKey
if (dictionary.ContainsKey("key"))
dictionary["key"] = dictionary["key"] + yourValue;
Si vous avez besoin d'utiliser la liste, vous devez foreach la liste et rechercher les clés. Simplement, vous pouvez utiliser la table de hachage.
Pour sûr, le dictionnaire est préférable dans votre cas. Vous ne pouvez pas modifier la valeur de la classe KeyValue<string,int>
Car elle est immuable.
Mais même si vous souhaitez toujours utiliser List<KeyValuePair<string, int>>();
. Vous pouvez utiliser IEqualityComparer<KeyValuePair<string, int>>
. Le code sera comme.
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();
}
}
Et l'utiliser dans Contient comme
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
}
ce qui ne sonne pas bien.
j'espère que cette info aide ..
Vos besoins décrivent exactement la conception 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";
Pour quiconque doit utiliser une liste (ce qui était le cas pour moi, car il ne fait pas les choses que Dictionary ne fait pas), vous pouvez simplement utiliser une expression lambda pour voir si la liste contient la clé:
list.Any(l => l.Key == checkForKey);