Gå til innhold

C#: listesortering, sortere personobjekter på alder


Anbefalte innlegg

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? :D Er ingen byggefeil, lista er bare ikke sortert.

Lenke til kommentar
Videoannonse
Annonse

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
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

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;
}
}

:D

Fra et snake-spill jeg laget for noen uker siden :D

Lenke til kommentar
  • 1 måned senere...
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 av Techster
Lenke til kommentar

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 av GeirGrusom
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...