从现有集合中错误地创建新集合

时间:2014-03-31 16:17:26

标签: c# dictionary collections

我仍然是C#的初学者,所以我确信我在这里错过了一些基本概念,但我正在努力解决这个问题。
我正在尝试从两个现有系列中创建一个新系列。
第一个是Dictionary<string, someModel[]> 第二个是Dictionary<string, string>
我试图找到两个dicts键之间的匹配,如果匹配,则使用两个dicts中的值创建一个新的myOtherModel,但如果它们不匹配,我仍然想要创建新的{{1}但是如果缺少值的空字符串,那么添加所有新的myOtherModel将被添加到列表中 新的myModel对象将是两种情况之一
例如:Dict1.Keys = 1,2,3,4 .... 100。 Dict2.Keys = 5,9,27,55

myOtherModel

所以基本上,比较两个字典,对于较大字典中的每个项目,使用项目的值创建一个新的myModel(其中一个将为空)。但是,如果该项的键与另一个词典中的键匹配,则获取第二个词典的值并在新的myModel中拍打它 我试过乱搞一个元组,但我无法按照自己的意愿操纵它们。

这是我到目前为止,但不是给我490项(来自dict1的计数),而是获得44k(两者的数量相乘)

myList.Add(new myModel = {1, "", someModel[]}) //did not find a match 
myList.Add(new myModel = {5, dict2.MatchingValue, someModel[]}) // did find a match

1 个答案:

答案 0 :(得分:1)

每次迭代第一个集合时,您都会遍历第二个集合,这就是您看到太多结果的原因。您可以使用简单的Linq ...

轻松简化代码
    foreach (var pair in dict1)
    {
        // Get the matched value.  If there isn't one it should return the default value for a string.
        var matchedValue = dict2.Where(x => x.Key == pair.Key).Select(x => x.Value).SingleOrDefault();
        var x = new myModel()
        {
            prop1 = matchedValue,
            prop2 = pair.Key,
            prop3 = pair.Value
        };
        myListOfModels.add(x);
    }