キーに依存するディクショナリに値を入れようとしています...たとえば、インデックスの0にあるキーのリストに「a」という文字がある場合。インデックス0のvalを、キー "a"(辞書(キーはインデックス0の "a"、インデックス0のval)のある辞書内のリストに追加します... ...辞書(キーは "b"のインデックス2、インデックス2の値))
私はこのような出力を期待しています:
リストビューlv2内:1,2,4リストビューlv2内:3,5
私が得ているものは両方のリストビューで3、4、5です
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"];
解決:
elseコードセクションを次のように置き換えます。
testList.Add(key [index]、new List {val [index]});
あなたの助けのためにみんなをthx =)
辞書の両方のキーに同じリストを使用しています
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]});
}
}
キーが存在しない場合、新しいList(Of Long)を1つ作成し、それにlong値を追加します
tempList
を削除し、else
句を次のように置き換えます。
testList.Add(key[index], new List<long> { val[index] });
また、Contains
は使用しないでください。 TryGetValue
の方がはるかに優れています:
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 });
}
}
宿題の問題のように聞こえますが、
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]);
}
this (およびその他の関連チュートリアル)をお読みください
Elseを次のものに置き換えます。
_else
{
tempList.Clear();
tempList.Add(val[index]);
testList.Add(key[index], new List<long>(tempList));
}
_
問題は、両方のキーにTempListへの参照を追加することです。これは同じ参照であるため、最初の参照で置き換えられます。
新しいリストを作成して、置き換えられないようにします:new List<long>(tempList)
ここで何をしようとしているのかは完全にはわかりませんが、すべての辞書エントリに同じリストが必要だったわけではありません。
templistは問題のスワップですtemplist.Clear()
for templist = new List<Long>()
または行く
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]);
}