Нет прямого ответа, так как это зависит от того, что вы считаете совпадением. Есть простые, а также сложные подходы и в любом месте между ними. Вам нужно придумать алгоритм для этого. Легкий подход состоял бы в том, чтобы сбрить секунды и просто сравняться до минуты, однако это может быть слишком долго. Вы можете написать метод, который нормализует временные метки до 5 или 10 секунд и группирует их, как было предложено.
Если вы хотите сгруппировать любые два сообщения, которые находятся в пределах х секунд вместе, этот подход будет работать в основном. Всегда будут те значения, которые находятся в пределах диапазона, но падают с обеих сторон отсечки. Если вы в порядке с этим и цените простоту, то приведенный выше ответ будет работать.
Если это не сработает, и вы хотите сгруппировать через искусственное обрезание, вам понадобится другой подход.Простой подход в этом случае может заключаться в том, что вы используете LINQ для группировки всем, кроме метки времени. Это сделает предварительную группировку ваших данных. Затем вы можете перебирать каждую группу и сравнивать каждое значение времени друг с другом в одной и той же группе и определять, находится ли она в пределах вашего диапазона. Затем вручную захватите те значения, которые попадают в указанный диапазон, и сгруппируйте их вместе.
У этого есть дополнительный крайный кейс, на который вы должны будете принять решение. Если вы решите, что будете группироваться в течение 1 секунды, и у вас есть три записи, чьи секунды (упрощенные) 1, 2 и 3. 1 и 2 находятся в пределах секунды, а 2 и 3 также находятся в пределах секунды, но 1 и 3 арены, т. Вы бы группировали их на основе 2 в пределах одной секунды от других, или вы бы группировали 1 и 2, делая 2 не имеющим право быть сгруппированными с 3 и 3, были бы сами по себе.
В конечном итоге вы получите решение, которое может вырасти ведро, основанное на совокупности значений, или другое искусственное обрезание, основанное на первой группе, созданной, а не на жестком отключении времени. Трудное время намного проще, поэтому, если у вас не будет растущих ведер, я бы порекомендовал вам просто нормализовать временную метку и сгруппировать по ней.
Вам необходимо определить, что вы подразумеваете под почти и планируете соответственно.
Когда вы говорите «почти», как вы хотите, чтобы это группа, в ту же минуту, те же 10 секунд? –
Скажем, в диапазоне 5 секунд. – mosquito87
Группировка по тем же самым значениям проста; взгляните на [многие вопросы] (http://stackoverflow.com/search?q=%5Bc%23%5D+linq+group+by+multiple+keys) на SO, связанные с этим. Группировка почти с одинаковыми значениями немного сложнее, потому что если X почти то же самое, что и Y, а Y почти то же, что и Z, то это не значит, что X почти то же самое, что и Z. [алгоритм кластеризации] (http://en.wikipedia.org/wiki/Cluster_analysis). – dtb