我有两个词典,并且它们有一个公用密钥,但是两个的值都不相同。 我有一个类(如下所示),它接受两个字典和加法的键和值。 虽然我即将解决此问题,但无法为每个文件获取正确的开始时间。我想将文件名,开始时间和结束时间添加到列表中。 这是我的代码:
public class PairedValues
{
public string FileName { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public PairedValues(string val1, DateTime val2, DateTime val3)
{
FileName = val1;
StartTime = val2;
EndTime = val3;
}
}
//主要功能代码-
public void GetData()
{
List<PairedValues> pairedValues = new List<PairedValues>();
foreach (var f in dict1)
{
string dumpValue;
var fileName = f.Key;
var startTime = DateTime.Parse(f.Value);
if (dict2.TryGetValue(fKey, out dumpValue))
{
foreach (var p in dict2)
{
endTime = DateTime.Parse(p.Value);
var fileName = dumpValue;
pairedValues.Add(new PairedValues(f.Key, startTime , endTime));
}
}
}
}
//字典
var dict1 = new Dictionary<string, string>; //(<filename, starttime>)
var dict2 = new Dictionary<string, string>; //(<filename, endTime>)
答案 0 :(得分:0)
在执行对dict2.TryGetValue(fKey, out dumpValue)
的调用之后,没有必要进入嵌套的foreach循环。如果该调用返回true,则说明该密钥存在,并且没有必要进行搜索。
但是实际上,有一种更简单的方法,您甚至不需要dumpValue
。检查dict2
是否包含密钥,如果包含,请使用索引器获取值。我认为也许您对索引器一无所知,并且您可能认为获取值的唯一方法是对Dictionary进行迭代。不是。
public void GetData()
{
List<PairedValues> pairedValues = new List<PairedValues>();
foreach (var f in dict1)
{
var fileName = f.Key;
var startTime = DateTime.Parse(f.Value);
if (dict2.ContainsKey(f.Key))
{
endTime = DateTime.Parse(dict2[f.Key]);
pairedValues.Add(new PairedValues(f.Key, startTime, endTime));
}
}
}