Эффективный поиск дубликатов в несортированной последовательности

Мне нужен очень эффективный способ поиска дубликатов в несортированной последовательности. Это то, что я придумал, но у него есть несколько недостатков, а именно:

  1. без необходимости подсчитываются вхождения после 2
  2. потребляется вся последовательность перед получением дубликатов
  3. создается несколько промежуточных последовательностей

module Seq = 
  let duplicates items =
    items
    |> Seq.countBy id
    |> Seq.filter (snd >> ((<) 1))
    |> Seq.map fst

Независимо от недостатков, Я не вижу причин заменять это двойным кодом. Можно ли улучшить это с помощью сравнительно лаконичного кода?

10
задан Daniel 14 March 2012 в 19:04
поделиться