2009-09-15 12 views

Répondre

2
// Assuming your data is an ArrayList called "source" 
ArrayList dest = new ArrayList(); 
foreach(int i in source) if(!dest.Contains(i)) dest.Add(i); 

Vous devez utiliser la liste <int> au lieu de ArrayList, cependant.

Edit: Autre solution à l'aide Trier + BinarySearch, comme suggéré par Kobi:

// Assuming your data is an ArrayList called "source" 
source.Sort(); 
ArrayList dest = new ArrayList(); 
foreach (int i in source) if (dest.BinarySearch(i)<0) dest.Add(i); 
+0

La suggestion de phoenix est plus rapide –

+1

Il vaudrait mieux utiliser 'Sort' et' BinarySearch', des méthodes déjà présentes dans ArrayList. – Kobi

+0

ArsenMkrt: l'avez-vous profilé? Cela dépend vraiment de l'ensemble de données en entrée, mais l'instanciation d'une table de hachage et la copie des données dans une nouvelle arborescence est un processus assez coûteux. – arul

5
Hashtable htCopy = new Hashtable(); 

foreach (int item in arrListFull) 
{ 
    htCopy[item] = null; 
} 

ArrayList distinctArrayList = new ArrayList(htCopy.Keys); 
+0

Cela se sent sale et hacky, mhmm, comme moi! – arul

0
public ArrayList RemoveDups (ArrayList input) 
{ 
    ArrayList single_values = new ArrayList(); 

    foreach(object item in input) 
    { 
     if(!single_values.Contains(item)) 
     { 
      single_values.Add(item); 
     } 
    } 
    return single_values; 
} 
+0

@Badaro, Il n'y a pas de "jolie Linq" dans cette réponse. – Ash

+0

@Ash Vérifiez l'historique, l'auteur a supprimé la partie Linq (c'est pourquoi j'ai également supprimé mon commentaire). Il l'a probablement fait parce que la question disait C# 2.0, mais je pense qu'il aurait dû garder les deux exemples. – Badaro