我试图将值放入依赖于键的字典中...例如,如果在索引0的键列表中有一个字母" a"。我想将索引为0的val添加到字典内的一个列表中,键是" a" (字典(键是#34; a"索引0,val索引0)...字典(键是" b"索引2,val索引2)
我期待这样的输出:
列表视图中的lv1:1,2,4 in listview 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]});
大家帮忙=)答案 0 :(得分:14)
您在词典中使用相同的列表
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),然后将long值添加到其中
答案 1 :(得分:1)
听起来像是家庭作业问题,但是
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(及其他相关教程)
答案 2 :(得分:1)
将其替换为:
else
{
tempList.Clear();
tempList.Add(val[index]);
testList.Add(key[index], new List<long>(tempList));
}
问题是,您正在向两个键添加对TempList的引用,它是相同的引用,因此它将被替换为第一个。
我正在创建一个新列表,因此不会被替换:new List<long>(tempList)
答案 3 :(得分:1)
摆脱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 });
}
}
答案 4 :(得分:0)
我不完全确定你在这里要做什么,但我保证你不想在每个字典条目中都有相同的列表。
临时列表是templist.Clear()
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]);
}
答案 5 :(得分:0)
一个人可以使用此解决方案。这既清楚又疯狂。
Dictionary<int, List<string>> myDict = new Dictionary<int, List<string>>();
try
{
myDict[myKey].Add(myVal);
}
catch
{
myDict[myKey] = new List<string> { myVal };
}