2015-08-15 80 views
4

我想將這兩個「難看的」循環轉換爲LINQ表達式。誰能幫我嗎?我對LINQ相當陌生。提前致謝!使用LINQ而不是兩個for循環

foreach (Edge edge in distinctEdge) 
{ 
    var c = 0; 
    foreach(Edge e in EdgeList) 
    { 
     if(e.target == edge.target && e.source == edge.source) 
     { 
      c++; 
     } 
    } 
    edge.value = c; 
} 

回答

8

使用ReSharper

foreach (var edge in distinctEdge) 
{ 
    edge.value = EdgeList.Count(e => e.target == edge.target && e.source == edge.source); 
} 
+0

是的,你的回答是正確的,我必須安裝這個強大的工具和WONDERFUL工具。謝謝你回來! – catlovespurple

+3

@doglas ReSharper是'必備工具',用於C#開發 – Backs

+0

CodeRush也是非常不錯的工具。 –

4

東西容易閱讀和理解

var value=(from edge in distinctEdge 
    join e in EdgeList 
    on edge.Target equals e.Target 
    and e.source equals edge.source 
    select edge).Count(); 
+0

謝謝凱爾。也很好。我相信這種方式就像SQL連接一樣,在兩個列表中找到相互的元素,然後得到它的數量。 – catlovespurple

1

爲了完整起見回答原來的問題,我會提出以下建議,但我不相信它和使用由@ dog-las提出的foreach循環進行更新一樣可讀。但是,我最近使用這種方法更新了使用LINQ的集合中的所有對象進行更簡單的更新,所以認爲它很方便。

var result = distinctEdge.Select(c => 
     { 
      c.value = EdgeList.Count(e => e.target == c.target 
              && e.source == c.source); 
      return c; 
     }).ToList(); 
相關問題