South_Bridge Skrevet 10. desember 2009 Skrevet 10. desember 2009 Jeg har objektet "person" som består av flere variabler. blant annet alder. Jeg har lista "personer" (list) som inneholder noen personer. Jeg ønsker å sortere på alder, men får det ikke helt til. personer.Sort( delegate(Person p1, Person p2) { if (p1.alder < p2.alder) return 1; else return -1; }); Men jeg får ikke dette til å fungere helt... noen som kan guide meg på rett vei? Er ingen byggefeil, lista er bare ikke sortert.
Techster Skrevet 10. desember 2009 Skrevet 10. desember 2009 (endret) Mulig litt på siden av hva du holder på med, men jeg kunne funnet på å gjort det slik: for (int i = 0; i < Personer.Count(); i++) { var sortPers = from p in Personer orderby p.Alder ascending select p; } Endret 10. desember 2009 av Techster
GeirGrusom Skrevet 10. desember 2009 Skrevet 10. desember 2009 Det er mye enklere å bruke lambdauttrykk: personer.Sort( (a, b) => a.alder - b.alder ) Husk hvordan sammenligninger foregår: trekk b fra a dersom resultatet er større enn null er a større enn b, dersom resultatet er under null, er b større enn a, dersom resultatet er null, er a og b like. Derfor kan du returnere summen av a og -b og få en korrekt sammenligning.
hockey500 Skrevet 10. desember 2009 Skrevet 10. desember 2009 Du kan vel inherite IComparable og definere CompareTo? angående koden din: hvis p1 < p2, så skal du returnere -1. er p2 > p1, skal du returnere 1, og 0 hvis de er like
South_Bridge Skrevet 11. desember 2009 Forfatter Skrevet 11. desember 2009 Det er mye enklere å bruke lambdauttrykk: personer.Sort( (a, b) => a.alder - b.alder ) Husk hvordan sammenligninger foregår: trekk b fra a dersom resultatet er større enn null er a større enn b, dersom resultatet er under null, er b større enn a, dersom resultatet er null, er a og b like. Derfor kan du returnere summen av a og -b og få en korrekt sammenligning. Fancy shit Geir, skal prøve det når jeg kommer hjem! :-) takk alle andre også for responsen
steingrim Skrevet 11. desember 2009 Skrevet 11. desember 2009 personer.Sort( (a, b) => a.alder - b.alder ) Bah. Du veit å gjøre en stakkars Java-utvikler misunnelig.
GeirGrusom Skrevet 11. desember 2009 Skrevet 11. desember 2009 private static Func<Point, Point> GetStep(Direction dir) { switch (dir) { case Direction.Left: return a => new Point(a.X - 1, a.Y); case Direction.Right: return a => new Point(a.X + 1, a.Y); case Direction.Up: return a => new Point(a.X, a.Y - 1); case Direction.Down: return a => new Point(a.X, a.Y + 1); default: return a => a; } } Fra et snake-spill jeg laget for noen uker siden
Techster Skrevet 27. januar 2010 Skrevet 27. januar 2010 (endret) Det er mye enklere å bruke lambdauttrykk: personer.Sort( (a, b) => a.alder - b.alder ) Husk hvordan sammenligninger foregår: trekk b fra a dersom resultatet er større enn null er a større enn b, dersom resultatet er under null, er b større enn a, dersom resultatet er null, er a og b like. Derfor kan du returnere summen av a og -b og få en korrekt sammenligning. Hei, Forsøkte å bruke denne på en liste over objekter som skal sorteres stigende etter index. Indexene starter på 0. Alle objekter med index > 0 får index = 1 etter å ha kjørt denne koden på listen. Er ikke det rart? Endret 27. januar 2010 av Techster
GeirGrusom Skrevet 28. januar 2010 Skrevet 28. januar 2010 Jo, ettersom lambdauttrykk er funksjoner du skriver selv... får jeg se koden?
Techster Skrevet 28. januar 2010 Skrevet 28. januar 2010 Kopierte den bare direkte og tilpasset navnene; packets.Sort((a,b) => a.Index - b.Index);
GeirGrusom Skrevet 28. januar 2010 Skrevet 28. januar 2010 (endret) Merkvürdich ettersom du ikke har noen "=" burde ikke det skje. Er du sikker på at det er sorteringen som setter index lik 1? Den lambda funksjonen er synonym med dette: packets.Sort( delegate(ItemType a, ItemType b) { return a.Index - b.Index; } ); ItemType er datatypen til objektene dine. Endret 28. januar 2010 av GeirGrusom
Techster Skrevet 28. januar 2010 Skrevet 28. januar 2010 Ja, det syntes jeg og, men nå ,kanskje enda merkeligere fordi jeg ikke har forandret noe, fungerer det perfekt!
GeirGrusom Skrevet 28. januar 2010 Skrevet 28. januar 2010 Jeg har aldri hatt lignende problemer med det, så jeg heller mot å tro at det er noe i din kode ^^
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå