2016-01-25 3 views
2

У меня есть List<foo>, который имеет два свойства: start_time и end_timeПроверка Если интервалы одинаковой длины в списке

Предположим, что у нас есть 100 записей в этом списке. Как проверить, имеют ли все интервалы одинаковой длины? Другими словами, я хотел бы знать, равны ли значения разницы между временем конца и начала для всех объектов foo.

Где (value = end_time-start_time).

Можно ли достичь этого в одной строке LINQ?

Спасибо, оцените.

ответ

3

Конечно, вы можете написать что-то вроде этого:

var list = new List<foo>(); 
var areAllEqual = list.GroupBy(l => (l.end_time - l.start_time)).Count() == 1; 

В качестве альтернативы, если вы хотите сделать больше с этой информацией:

var differences = list.GroupBy(l => (l.end_time - l.start_time)).ToList(); 
var numDifferences = differences.Count(); 
var areAllEqual = numDifferences == 1; 
var firstDifference = differences.First().Key; 
var allDifferences = differences.Select(g => g.Key); 
+0

'.All()' возвращает 'Boolean'? – user1027620

+0

@ user1027620 Да, он возвращает 'true', если предикат является истинным для всех значений. Хотя, это было излишним, поэтому я обновил код, чтобы быть более кратким. – Rob

+0

Отлично, я дам этот снимок и отметю как принятый. – user1027620

0

Что-то, как это должно работать.

var first = items.First; 
var duration = first.end_time - first.start_time; 

var allEqual = items.All(i => duration == (i.end_time - i.start_time)) 
Смежные вопросы