J'essaie de mettre des valeurs dans un dictionnaire en fonction de la clé ... Par exemple, si dans une liste de clés à l'index 0, il y a une lettre "a". Je veux ajouter le val d'index 0 à une liste à l'intérieur d'un dictionnaire avec la clé "a" (dictionnaire (la clé est "a" à l'index 0, val à l'index 0) ... dictionnaire (la clé est "b" à indice 2, val à l'indice 2))
J'attends une sortie comme celle-ci:
dans listview lv1: 1,2,4 dans listview lv2: 3,5
ce que je reçois est 3,4,5 dans les deux listes
List<string> key = new List<string>();
List<long> val = new List<long>();
List<long> tempList = new List<long>();
Dictionary<string, List<long>> testList = new Dictionary<string, List<long>>();
key.Add("a");
key.Add("a");
key.Add("b");
key.Add("a");
key.Add("b");
val.Add(1);
val.Add(2);
val.Add(3);
val.Add(4);
val.Add(5);
for (int index = 0; index < 5; index++)
{
if (testList.ContainsKey(key[index]))
{
testList[key[index]].Add(val[index]);
}
else
{
tempList.Clear();
tempList.Add(val[index]);
testList.Add(key[index], tempList);
}
}
lv1.ItemsSource = testList["a"];
lv2.ItemsSource = testList["b"];
Solution:
remplacez la section de code else par:
testList.Add (clé [index], nouvelle liste {val [index]});
merci à tous pour votre aide =)
Vous utilisez la même liste pour les deux clés dans le dictionnaire
for (int index = 0; index < 5; index++)
{
if (testList.ContainsKey(key[index]))
{
testList[k].Add(val[index]);
}
else
{
testList.Add(key[index], new List<long>{val[index]});
}
}
Il suffit de créer une nouvelle liste (Of Long) lorsque la clé n'existe pas, puis de lui ajouter la valeur longue
Supprimez la tempList
et remplacez votre clause else
par:
testList.Add(key[index], new List<long> { val[index] });
Et n'utilisez pas Contains
. TryGetValue
est bien meilleur:
for (int index = 0; index < 5; index++)
{
int k = key[index];
int v = val[index];
List<long> items;
if (testList.TryGetValue(k, out items))
{
items.Add(v);
}
else
{
testList.Add(k, new List<long> { v });
}
}
Cela ressemble à un problème de devoirs, mais
for (int index = 0; index < 5; index++)
{
if (!testList.ContainsKey(key[index]))
testList.Add(key[index], new List<string> {value[index]});
else
testList[key[index]].Add(value[index]);
}
Lire this (et les autres tutoriels pertinents)
Remplacez le reste par:
else
{
tempList.Clear();
tempList.Add(val[index]);
testList.Add(key[index], new List<long>(tempList));
}
Le problème est que vous ajoutez une référence à TempList aux deux clés, il s’agit de la même référence, elle est donc remplacée dans la première.
Je crée une nouvelle liste pour qu'elle ne soit pas remplacée: new List<long>(tempList)
Je ne suis pas tout à fait sûr de ce que vous essayez de faire ici, mais je vous garantis que vous ne voulez pas voir la même liste dans toutes les entrées de dictionnaire.
templist est votre problème d'échange templist.Clear()
pour templist = new List<Long>()
Ou aller chercher
for (int index = 0; index < 5; index++)
{
if (!testList.ContainsKey(key[Index]))
{
testList.Add(key[Index], new List<Long>());
}
testList[key[index]].Add(val[index]);
}