将类List列表项匹配的Dictionary键加入新列表 - C#

时间:2016-06-01 10:23:41

标签: c# linq list dictionary

所以我有一个Dictionary字符串值为Keys。我有一个班级列表:

listCoord = new List<Coord>();

其班级Coord如下:

class Coord
{
    public string Segment { get; set; }
    public double startX { get; set; }
    public double startY { get; set; }
    public double endX { get; set; }
    public double endY { get; set; }
}

它有大约12000 string Segment个。我的词典Keys属于其中一些细分市场。现在我需要使用List中的坐标值加入我的词典中的片段。

首先,我选择了使用foreach的方法,然后通过每个字典键将其与列表段进行比较以找到匹配项。然后我了解到LINQ可以使用SQL的内部关节来做同样的事情。

问题:

  1. 查找词典键和某些列表项之间匹配的最佳方法是什么?
  2. 一旦我这样做,如何将其全部放入包含匹配的segment及其对应的startX, startY, endX, endY值作为列表项的另一个列表中。?
  3. 如果已经提出并回答了这样的问题,我会提前道歉;个人找不到。

2 个答案:

答案 0 :(得分:6)

这是加入List&amp; amp;字典(你只会得到匹配的Coords)

 List<CoordNew> newlist = listCoord .Join(strDictionary, 
                                 a => a.Segment, //From listCoord
                                 b => b.Key, //From strDictionary
                                 (a, b) => new CoordNew() { 
                                      Segment_dictionaryValue = b.Value
                                      //Other values from list or dictionary
                                 }).ToList();

如果您需要CoordNew

class CoordNew
{
    public string Segment { get; set; }
    public string Segment_dictionaryValue { get; set; }
    public double startX { get; set; }
    public double startY { get; set; }
    public double endX { get; set; }
    public double endY { get; set; }
}

答案 1 :(得分:3)

你也可以试试这个

    var listCoord = new List<Coord>();

    Dictionary<String, string> dict = new Dictionary<string, string>();
    dict.Add("A", "Myvalues");


    listCoord.Add(new Coord
    {
            Segment = "A",
    });

    listCoord.Add(new Coord
    {
      Segment = "B",
    });

    listCoord.Add(new Coord
    {
       Segment = "C",
    });

    List<Coord> result = listCoord.Where(cords => dict.ContainsKey(cords.Segment))
                         .ToList();
  

根据您的要求使用ContainsKey和/或ContainsValues

dotnetfiddle

提供的样本工作

感谢捕获@Yacoub Massad