Laden...

Objekte in einem Hastable nach einem Attribut sortieren

Erstellt von hypersurf vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.773 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren
Objekte in einem Hastable nach einem Attribut sortieren

Hallo zusammen,

ich komme per Google und Forumssuche irgendwie nicht weiter und denke dass Ihr mir bestimmt helfen könnt 😉

Ich habe ein Hashtable dem einige Objekte hinzugefügt werden. Ganz zum Schluss möchte ich den Hashtable anhand eines Attributs der Objekte sortieren. Wie stelle ich das an?

Vielen Dank!

Grußs HS

Gelöschter Account
vor 15 Jahren

benutze ein sortedDictionary anstatt der hashtable und übergebe ihn einen eigenen comparer.

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren

Wie genau übergebe ich den Comparer an das Dictionary?
Was mache ich hier falsch? Der Compiler findet keine passende Überladung und ich verstehe gerade nicht so richtig, wie ich den Comparer übergeben muss X(

SortedDictionary<string, Spieler> colSpielerTeam1 = new SortedDictionary<string, Spieler>(new SpielerComparer());
   class SpielerComparer : IComparer<Spieler>
   {

      #region IComparer<Spieler> Member

      public int Compare(Spieler x, Spieler y)
      {
         if (x.Rang > y.Rang)
         {
            return 1;
         }
         else
         {
            return -1;
         }
      }

      #endregion
   }
5.658 Beiträge seit 2006
vor 15 Jahren

Der Comparer kann nur vom Typ des Schlüssels sein, nicht der des Wertes, wenn ich mich nicht irre.
Christian

Weeks of programming can save you hours of planning

3.971 Beiträge seit 2006
vor 15 Jahren

So wird schon eher ein Schuh drauß:


if (x.Rang > y.Rang) {
  return 1;
}
else if (x.Rang < y.Rand) {
  return -1;
}
else {
  return 0;
}

Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, deren Reihenfolge anhand des Schlüssels bestimmt wird.

Wenn du den Value sortiert ausgegeben haben möchtest und du dennoch einen schnellen Zugriff über den Key haben willst, müsstest du 2 Dictionarys haben.


Dictionary<string, Spieler> dict1 = new Dictionary<string, Spieler>();
SortedDictionary<Spieler, string> dict2 = new SortedDictionary<Spieler, string>(new SpieleComparer);

Beide Dicts müssen aber immer die gleichen Wert-Gegenüberstellung enthalten haben. Am besten du kapselst das ganze in eine eigene Art Dictionary-Variante.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren

Dann macht das ganze mit dem SortedDictionary ja keinen Sinn. Ich will ja nicht nach dem Key sortieren.

5.658 Beiträge seit 2006
vor 15 Jahren

Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, deren Reihenfolge anhand des Schlüssels bestimmt wird.

Weeks of programming can save you hours of planning

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren

Hat jemand zufällig ein Beispiel einer SortedList mit Custom Compare was auch funktioniert? Ich hab mittlerweile 5 verschiedene Beispiele ausprobiert, die alle miteinander nicht funktionieren bzw. sich nicht mal starten lassen.

Ich möchte doch nur nach einem Attribut eines Objekts sortieren. Das muss doch mit Hausmitteln von .NET einfach machbar sein 🙁

3.971 Beiträge seit 2006
vor 15 Jahren

Schau dir mein Post nochmal an, speziell der Bereich wo steht, dass du dafür 2 Dictionarys brauchst. Dafür schreibst du dir eine eigene Dictionary-Klasse. Das ganze dauert nur wenige Minuten.

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 4

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

3.003 Beiträge seit 2006
vor 15 Jahren

*hust* Ich will niemandem seinen Spass mit IComparer, zusätzlichen Klassen und dergleichen nehmen, aber wäre eine pragmatische Lösung nicht....einfacher?


SortedDictionary<string, Spieler> dict = new SortedDictionary<string, Spieler>();

dict.Add(Guid.NewGuid().ToString(), new Spieler("LaTino", 32));
/* ... */

var orderedCollection = dict.OrderBy(p => p.Value.Alter);

Ich mein ja nur...

LaTino
EDIT: Kleiner Typo.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo hypersurf,

Dann macht das ganze mit dem SortedDictionary ja keinen Sinn. Ich will ja nicht nach dem Key sortieren.

da du über den Key auch auf das Value zugreifen kannst, steht es dir frei einen Comparer zu schreiben, der die Keys eben nach den Values sortiert.

herbivore