2016-06-01 18 views
1

因此,我有一個Dictionary,其字符串值爲Keys。我有一類表:將與List列表項相匹配的字典鍵添加到新列表中 - C#

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值的列表中作爲列表項。

如果這個問題已經被要求和回答,我很抱歉提前;個人無法找到它。

+0

你解釋如何貌似工作可用? –

回答

2

你也可以試試這個

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馬薩德

+2

使用'ContainsKey'獲得更好的性能。 –

+1

這工作。最後一個陳述是那個伎倆,謝謝! – Romy

3

這是加入列表&詞典的方式(你將只能得到匹配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; } 
} 
+0

也證實了這個工作,但我會用Eldho的答案,更少的代碼。雖然我需要在不同的代碼片段中使用這個Join示例,所以謝謝:) – Romy

+1

謝謝@Romy。我的回答和@Eldho有區別。他的解決方案中的'結果'不會給你片段'A'的字典值。然而,你可能不需要這個,然後按照上面的(@ Eldho的),這是短而完美的過濾列表。 – Lali

相關問題