Avatar billede Syska Mester
04. januar 2005 - 11:57 Der er 7 kommentarer og
1 løsning

Ens værdier i ArrayList

Hej,

Jeg har en ArrayList med nogle ens værdier (strings), hvad er den nemmeste måde at fjerne sådanne på efter det er oprettet?

Har prøvet lidt frem og tilbage, men der er sikkert en smart måde jeg ikke lige har fundet på endnu!

// ouT
Avatar billede arne_v Ekspert
04. januar 2005 - 12:05 #1
Den åbenlyse er jo bare for hvert element at løbe listen igennem for
duplikater. Men den har jo en grim O(n^2) egenskab.

Men ved små data mængder er den nok god nok.

De mest oplagte alternativer må være:

1)  ArrayList -> Hashtable -> ArrayList

    duplikater forsvinder automatisk fordi man overskriver keys

    den vil have O(N) egenskaber

    men den bruger en del memeory

2)  sortere arraylisten først

    det er en O(n*logn) operation

    derefter er det jo nemt at løbe den sorterede liste igennem og fjerne
    duplikater (fordi duplikaterne ligger lige efter hinanden)
Avatar billede Syska Mester
04. januar 2005 - 12:37 #2
ja, da det ikke er så store array's omkring 40, tror jeg det bliver den første, men kan stadig ikke helt regne den ud, men du har sikkert et lille eksemple liggende...

Jeg må tænke på en forkert måde...

Lige nu har jeg det gamle og nye array som jeg vil smide den over i, men synes jeg er læst da den jo først skal tjekke om det allerede er blevet lagt i det gamle og så bliver det til tilføjet flere gange....:-S

tror bare jeg bliver endnu mere forvirret end jeg er nu, hvis jeg fortsætter.... ser frem til et meget simpelt svar som jeg ikke lige selv kan komme på nu.

// ouT
Avatar billede Syska Mester
04. januar 2005 - 12:38 #3
jow, hvis du alligevel ligger inde med eksempler på de 2 andre måder, må du da også gerne poste dem, kan jo ske jeg kan bruge dem senere eller andre kan måske også have gavn af dem.
Avatar billede arne_v Ekspert
04. januar 2005 - 12:50 #4
using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        ArrayList lst1 = new ArrayList();
        lst1.Add("A");
        lst1.Add("BB");
        lst1.Add("CCC");
        lst1.Add("BB");
        lst1.Add("A");
        foreach(string elm in lst1) Console.WriteLine(elm);
        Hashtable map = new Hashtable();
        foreach(string elm in lst1) if(!map.ContainsKey(elm)) map.Add(elm, null);
        ArrayList lst2 = new ArrayList();
        foreach(string elm in map.Keys) lst2.Add(elm);
        foreach(string elm in lst2) Console.WriteLine(elm);
    }
}
Avatar billede arne_v Ekspert
04. januar 2005 - 12:58 #5
using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        ArrayList lst1 = new ArrayList();
        lst1.Add("A");
        lst1.Add("BB");
        lst1.Add("CCC");
        lst1.Add("BB");
        lst1.Add("A");
        foreach(string elm in lst1) Console.WriteLine(elm);
        lst1.Sort();
        ArrayList lst2 = new ArrayList();
        for(int i = 0; i < lst1.Count; i++) if(i == 0 || lst1[i] != lst1[i - 1]) lst2.Add(lst1[i]);
        foreach(string elm in lst2) Console.WriteLine(elm);
    }
}
Avatar billede arne_v Ekspert
04. januar 2005 - 12:59 #6
using System;
using System.Collections;

class MainClass
{
    public static void Main(string[] args)
    {
        ArrayList lst1 = new ArrayList();
        lst1.Add("A");
        lst1.Add("BB");
        lst1.Add("CCC");
        lst1.Add("BB");
        lst1.Add("A");
        foreach(string elm in lst1) Console.WriteLine(elm);
        ArrayList lst2 = new ArrayList();
        for(int i = 0; i < lst1.Count; i++) if(!lst2.Contains(lst1[i])) lst2.Add(lst1[i]);
        foreach(string elm in lst2) Console.WriteLine(elm);
    }
}
Avatar billede Syska Mester
05. januar 2005 - 09:56 #7
Hvis du smider et svar skal du få point
Avatar billede arne_v Ekspert
05. januar 2005 - 11:09 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester