2015-02-17 2 views
1

Как проверить два IEnumerables, имеют ли они один и тот же счетчик, не пропуская их по отдельности. Значит, я не хочу делать это Count() == Count().Проверить два IEnumerable, если их граф равен

Я хотел бы найти способ сделать это за один проход. Есть идеи?

+0

Использовать IList или ICollection Я думаю. –

+0

Вы не можете. Перечислители могут даже не иметь конечного значения. – Dirk

+0

Вы не можете сделать это, если только вы не нанесете их на тип, у которого есть свойство Count, которое позволяет вам рассчитывать, не итерируя все предметы. –

ответ

3

Это невозможно. Какой бы подход вы ни выбрали, вам придется проходить через обе последовательности.

Самый простой способ - использовать метод Count(), где будет O(1), если обе последовательности: List. В этом случае Count() не может получить значение свойства списка, которое называется Count.

+0

Использование 'Count()' займет время, пропорциональное более длинной коллекции; лучше проверить, реализуются ли обе или обе коллекции либо «ICollection», либо «ICollection ». Если это так, сравните их количество. Если да, прочитайте его счетчик и попробуйте перечислить, что N + 1 элементов другого. Если вторая коллекция закончилась после N, они совпадают; если он заканчивается раньше или не заканчивается после N, они этого не делают. Если ни один из них не использует интерфейс подсчета, повторите их оба одновременно * и остановитесь, как только достигнете конца. – supercat

Смежные вопросы