Trovare duplicati SENZA Linq

Ieri ho sbagliato a far partire un post salvato in autopubblicazione post datata sul trovare duplicati di valori con Linq; grazie ad un commentatore Roberto Sarati ho visto la pubblicazione del post (ieri non ero al pc).

Quindi provvedo:

a) ringraziare Roberto
b) pubblicare il post che volevo pubblicare, ciò: trovare gli elementi duplicati in una lista senza Linq

perchè senza Linq?
Perchè mi è capitato, purtroppo, una macchina di produzione con solo il framework 2.

La soluzione implementata è stata:


public static IEnumerable<T> MyDistinctNoLinq<T>(this IEnumerable<T> source)
        {
            List<T> uniques = new List<T>();

            foreach (T item in source)
            {
                if (!uniques.Contains(item))
                    uniques.Add(item);
            }
            return uniques;
        }

 

è vero anche che in giro ho trovato anche quest'altra soluzione che viene dichiarata più performante:

public IEnumerable<T> DedupCollection<T> ( IEnumerable<T> input )
{
  HashSet<T> passedValues = new HashSet<T>();
  //relatively simple dupe check alg used as example
  foreach( T item in input)
  {
    if( passedValues.Contains(item) )
      continue;
    else
    {
      passedValues.Add(item)
      yield return item;
     }
  }
}

 

ecco il post che dovevo pubblicare ieri Sorriso

Grazie ancora a Roberto per la segnalazione

Rebitting Tags: |