Использовать LINQ вместо двух циклов
Я хочу преобразовать эти два "уродливых" для циклов в выражение 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;
}
3 ответов:
Use 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();
Для полноты ответа на исходный вопрос я предложу следующее, Но я не думаю, что это так же читаемо, как использование цикла foreach, предложенного @dog-las для обновления. Тем не менее, я использовал этот метод обновления всех объектов в коллекции с помощью LINQ недавно для более простого обновления, так что думаю, что это удобно.
var result = distinctEdge.Select(c => { c.value = EdgeList.Count(e => e.target == c.target && e.source == c.source); return c; }).ToList();
Comments