使用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;
}
使用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();