Avatar billede Skynet Mester
27. april 2008 - 12:56 Der er 5 kommentarer og
1 løsning

Betingelse i If sætning

Hej,

nogen som ved hvordan jeg sikrer mig at to ens objekter ikke bliver tilføjet til listen.

I mit eksempel kører denne kode hvor gang brugen klikker på et element(Dato) i min ListBox

// Finder ledige flasker
            List<string> sub_Ledige_Flaskeliste = new List<string>();

            foreach (Flaske en_flaske in Flaskeliste)
                //lav subliste af dem som er true og false og udskriv dem i to forskellige lister
                if ((en_flaske._flaskeledig(dt)) == true)
                {
                    sub_Ledige_Flaskeliste.Add(en_flaske.PropertyFlaskeID);
                }


men tror jeg skal have et "filter" i denne sætning så jeg ikke får to ens, hvis nu brugeren går tilbage til den samme dato i ListBoxen.

{
                    sub_Ledige_Flaskeliste.Add(en_flaske.PropertyFlaskeID);
                }
Avatar billede arne_v Ekspert
27. april 2008 - 15:01 #1
List<> checker ikke for dubletter.

HashSet<> goer (kraever at du er paa nyeste .NET version).
Avatar billede Skynet Mester
27. april 2008 - 15:35 #2
ok, er det muligt at sortere et HashSet, så hvis den indeholder Datoer, så bliver de indsat i rigtig rækkefølge i settet? eller skal jeg så bruge en hægtetliste?

Er det muligt at sætte betingelsen ind i en alm. ListBox med Items.Add?
Avatar billede arne_v Ekspert
28. april 2008 - 01:44 #3
Du kan enten have data i både en HashSet og en List eller du kan konvertere fra
HashSet til List inden du sorterer.
Avatar billede iluka Nybegynder
28. april 2008 - 10:31 #4
HashSet bruger vel at mærke objektets hash til at undgå dubletter. Hvis du opretter to objekter der er ens i den forstand at f.eks. din propertyFlaskeID er den samme kan du sagtens tilføje dem til samme HashSet. Det kan du kun løse med en eller anden if sætning.

Ellers er Arnes løsning fin, og du kan let lave et HashSet, konvertere det til en List og og sortere det:

HashSet<Flaske> flasker = new HashSet<Flaske>();
flasker.Add(...);
falsker.ToList().Sort((f1, f2) => f1.PropertyFlaskID.CompareTo(f2.PropertyFlaskeID));

Undskyld hvis der er slåfejl. Hvis din PropertyFlaskID er en int så kan du i stedet for CompareTo bare bruge < eller > alt efter hvordan du vil have dem sorteret.
Avatar billede johny Nybegynder
28. april 2008 - 11:37 #5
Er det ikke bare at lave et tjek på IndexOf istedet?

if(sub_Ledige_Flaskelist.IndexOf(en_flaske.PropertyFlaskeID)==-1)
    sub_Ledige_Flaskelist.Add(en_flaske.PropertyFlaskeID);

Sådan der?
Avatar billede Skynet Mester
01. maj 2008 - 22:54 #6
tak for hjælpen, og johnys kode virker som jeg havde håbet..
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