Выберите Distinct из списка IEnumerable <T>в .NET 2.0 - PullRequest
1 голос
/ 05 декабря 2008

Я пытаюсь отфильтровать объект IEnumerable от повторяющихся значений, поэтому я хотел бы получить из него различные значения, например, допустим, что он содержит дни:

Понедельник вторник среда Среда

Я бы хотел отфильтровать его и вернуть:

Понедельник вторник Среда

Какой самый эффективный способ сделать это в .net 2.0?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2008
Dictionary<object, object> list = new Dictionary<object, object>();
foreach (object o in enumerable)
    if (!list.ContainsKey(o))
    {
        // Do the actual work.
        list[o] = null;
    }

Словарь будет использовать хеш-таблицу для хранения ключей, поэтому поиск эффективен.

Сортировка будет в лучшем случае O (n log (n)). Хеш-таблица с эффективной хеш-функцией часто превосходит ее (O (1) поисков).

1 голос
/ 05 декабря 2008

Сделайте еще один IEnumerable. Сортировать оригинал. Для каждого элемента в оригинале, если новый не содержит старого, добавьте его.

0 голосов
/ 05 декабря 2008

Другой альтернативой является использование HashSet - HashSet не позволяет использовать дублирующиеся элементы и не требует пары ключ / значение.

...