2013-04-01 5 views
0

J'ai un arrayliste "Templiste" après un certain temps j'ai vu beaucoup de valeurs dupliquées sont ajoutées à arraylist, donc j'ai pensé à supprimer les doublons. Quand j'ai googlé j'ai trouvé quelques solutions mais la plupart d'entre eux sont source de confusion. Quelque part où il est dit trier l'arraliste et trouver et supprimer les doublons certains où dire d'utiliser distinct, quelque part dire d'utiliser hashlist. De toute façon, je ne veux pas remplacer Arraylist avec d'autres structures. Quelqu'un peut-il me fournir une logique pour éviter les doublons d'arraylist?Suppression des entrées en double de l'arraliste

Le code qui maintenant j'ai est

public class Templist : ArrayList 
{ 
    //some logic behind arraylist 
}      Templist items = new Templist(); 

         if (!(obj is Testobject) && !(obj is Leafobject)) 
         { 
          items.Add(obj); 
         } 


        if (items.Count > 0) 
        { 
         SSendObjectCollection(items); 
        } 

       static public void SendObjectCollection(Templist col) 
       { 
        try 
        { 
         col.Sort(); 
        } 
        catch(System.Exception exception) 
        { 
        } 

       } 

MISE À JOUR

je l'ai fait ce code

public static string[] RemoveDuplicates(string[] s) 
{ 
    HashSet<string> set = new HashSet<string>(s); 
    string[] result = new string[set.Count]; 
    set.CopyTo(result); 
    return result; 
} 

Puis j'ai appelé en fonction exisitng SendObjectCollection() comme RemoveDuplicates(col); mais il jette des erreurs, tout le monde peut me guider ce qui est g oing mal ici?

+8

Quelques questions: Avez-vous travaillé sur * où * les doublons viennent? Vous nous avez donné aucun contexte. Pourquoi utilisez-vous 'ArrayList' en premier lieu? (Les collections génériques sont presque toujours préférables.) Pourquoi vous * dérivez * de 'ArrayList'? (Dériver votre propre collection de ceux qui existent déjà est presque toujours une mauvaise idée.) –

+0

@Jon Skeet dupliquer devient dans la méthode SendObjectCollection, cet arralist est personnalisé arralist, je vais modifier la question – vettori

+0

S'il vous plaît lire http://tinyurl.com/so -list quand vous le faites –

Répondre

3

Vous devez résoudre deux problèmes. Tout d'abord vous devez supprimer les valeurs en double en utilisant:

myArray = new Arraylist(myArray.Distinct().ToArray()); 

et double vérification avant d'ajouter la valeur à la liste de tableau:

if(myArray.indexOf("value") == -1) {myArray.Add("value");} 

Hope this aide

+0

Ou 'myArray.Contains (" value ")' – Corak

+0

@Phong Vo a mis à jour ma question – vettori

+0

@Phong Vo pouvez-vous modifier en fonction de ma question, je ne reçois pas la méthode Distinct() même si j'ai ajouté l'espace de noms system.Linq – vettori

1

S'il vous plaît inclure plus d'informations, comme où voulez-vous ajouter un élément dans ArrayList. Quoi qu'il en soit, vous pouvez utiliser

ArrayList.Contain(somevalue) 

pour vérifier si elle existait dans ArrayList avant d'ajouter d'éviter la duplication

+0

a mis à jour ma question – vettori

+0

si (! (Obj est Testobject) &&! (Obj est Leafobject) && ArraList.indexOf (obj) == -1) Cela vous aidera à éviter la duplication –

+0

cela fonctionnera, parce que je vais beaucoup de valeurs de doublons, donc je doute que cela empêchera seulement le premier ensemble de valeurs seulement – vettori

Questions connexes