使用LINQ代替两个for循环

本文关键字:两个 for 循环 LINQ 使用 | 更新日期: 2023-09-27 18:08:06

我想将这两个"丑陋的" for循环转换为LINQ表达式。有人能帮我吗?我对LINQ很陌生。提前感谢!

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;
}

使用LINQ代替两个for循环

使用ReSharper:

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

易于阅读和理解

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

为了完整地回答最初的问题,我将提出以下建议,但我不认为它像使用@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();