如何将列表中 KeyValuePair 的值更改为字典中的值?
How to change value of KeyValuePair in a List as a value in a Dictionary?
我的情况比较复杂。我想更改此词典中 KeyVluePair 的值 -> Dictionary<string, List<KeyValuePair<string, int>>>
到目前为止我已经完成了这个但我不知道如何继续:
string input = Console.ReadLine();
Dictionary<string, List<KeyValuePair<string, int>>> dworfs = new Dictionary<string, List<KeyValuePair<string, int>>>();
while (input != "Once upon a time")
{
string[] elements = input.Split(new[] { " <:> " }, StringSplitOptions.RemoveEmptyEntries);
if (dworfs.ContainsKey(elements[0]))
{
if (dworfs[elements[0]].Any(x => x.Key.Contains(elements[1])))
{
var dworf = dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]);
if (dworf.Value < int.Parse(elements[2]))
{
dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
}
}
else
{
dworfs[elements[0]].Add(new KeyValuePair<string, int>(elements[1], int.Parse(elements[2])));
}
}
else
{
dworfs.Add(elements[0], new List<KeyValuePair<string, int>> { new KeyValuePair<string, int> (elements[1], int.Parse(elements[2])) });
}
input = Console.ReadLine();
}
这一行 dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
给我一个错误 赋值的左侧必须是变量,属性 或索引器 。我不知道如何分配价值。有人可以帮忙吗?
如果 KeyValuePair
是 Dictionary
你会有更多的机会。
但是
var dwarf = dworfs[elements[0]];
var obj = dwarf.FirstOrDefault(x => x.Key == elements[1]);
var index = dwarf.IndexOf(obj);
dwarf[index] = new KeyValuePair<string, int>(elements[1], int.Parse(elements[2]));
提示你不需要在一行中完成所有事情
错误消息描述了问题,FirstOrDefault()
将 return 的值只能用作表达式的右侧部分。您不能为方法结果赋值。
试试这个:
var index = dworfs[elements[0]].IndexOf(dworf);
dworfs[elements[0]][index] = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
请记住,FirstOrDefault()
可能 return 为空,但您没有在代码中检查这种情况,这可能导致 NullReferenceException
s。
我的情况比较复杂。我想更改此词典中 KeyVluePair 的值 -> Dictionary<string, List<KeyValuePair<string, int>>>
到目前为止我已经完成了这个但我不知道如何继续:
string input = Console.ReadLine();
Dictionary<string, List<KeyValuePair<string, int>>> dworfs = new Dictionary<string, List<KeyValuePair<string, int>>>();
while (input != "Once upon a time")
{
string[] elements = input.Split(new[] { " <:> " }, StringSplitOptions.RemoveEmptyEntries);
if (dworfs.ContainsKey(elements[0]))
{
if (dworfs[elements[0]].Any(x => x.Key.Contains(elements[1])))
{
var dworf = dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]);
if (dworf.Value < int.Parse(elements[2]))
{
dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
}
}
else
{
dworfs[elements[0]].Add(new KeyValuePair<string, int>(elements[1], int.Parse(elements[2])));
}
}
else
{
dworfs.Add(elements[0], new List<KeyValuePair<string, int>> { new KeyValuePair<string, int> (elements[1], int.Parse(elements[2])) });
}
input = Console.ReadLine();
}
这一行 dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
给我一个错误 赋值的左侧必须是变量,属性 或索引器 。我不知道如何分配价值。有人可以帮忙吗?
如果 KeyValuePair
是 Dictionary
你会有更多的机会。
但是
var dwarf = dworfs[elements[0]];
var obj = dwarf.FirstOrDefault(x => x.Key == elements[1]);
var index = dwarf.IndexOf(obj);
dwarf[index] = new KeyValuePair<string, int>(elements[1], int.Parse(elements[2]));
提示你不需要在一行中完成所有事情
错误消息描述了问题,FirstOrDefault()
将 return 的值只能用作表达式的右侧部分。您不能为方法结果赋值。
试试这个:
var index = dworfs[elements[0]].IndexOf(dworf);
dworfs[elements[0]][index] = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
请记住,FirstOrDefault()
可能 return 为空,但您没有在代码中检查这种情况,这可能导致 NullReferenceException
s。