South_Bridge Skrevet 10. desember 2009 Del 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. Lenke til kommentar
Techster Skrevet 10. desember 2009 Del 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 Lenke til kommentar
GeirGrusom Skrevet 10. desember 2009 Del 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. Lenke til kommentar
hockey500 Skrevet 10. desember 2009 Del 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 Lenke til kommentar
South_Bridge Skrevet 11. desember 2009 Forfatter Del 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 Lenke til kommentar
steingrim Skrevet 11. desember 2009 Del Skrevet 11. desember 2009 personer.Sort( (a, b) => a.alder - b.alder ) Bah. Du veit å gjøre en stakkars Java-utvikler misunnelig. Lenke til kommentar
GeirGrusom Skrevet 11. desember 2009 Del 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 Lenke til kommentar
Techster Skrevet 27. januar 2010 Del 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 Lenke til kommentar
GeirGrusom Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Jo, ettersom lambdauttrykk er funksjoner du skriver selv... får jeg se koden? Lenke til kommentar
Techster Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Kopierte den bare direkte og tilpasset navnene; packets.Sort((a,b) => a.Index - b.Index); Lenke til kommentar
GeirGrusom Skrevet 28. januar 2010 Del 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 Lenke til kommentar
Techster Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Ja, det syntes jeg og, men nå ,kanskje enda merkeligere fordi jeg ikke har forandret noe, fungerer det perfekt! Lenke til kommentar
GeirGrusom Skrevet 28. januar 2010 Del Skrevet 28. januar 2010 Jeg har aldri hatt lignende problemer med det, så jeg heller mot å tro at det er noe i din kode ^^ Lenke til kommentar
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å