从两个具有匹配键的字典添加到List <myclass>

时间:2019-12-16 21:21:31

标签: c# asp.net .net list dictionary

我有两个词典,并且它们有一个公用密钥,但是两个的值都不相同。 我有一个类(如下所示),它接受两个字典和加法的键和值。 虽然我即将解决此问题,但无法为每个文件获取正确的开始时间。我想将文件名,开始时间和结束时间添加到列表中。 这是我的代码:

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>)

1 个答案:

答案 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));
        }
    }
}