Array +Functor oder Callback ??
-
Hallo,
ich würde gerne ein Array sortieren.
struct _my_type { int a; int b; ... }; _my_type ar[10000]; /// ar soll jetzt sortiert werden.
Gibts nen container mit Functor oder Callback für die Ordnungsrelation ???
Grüße
-
0815-Arrays? Wie lame :p Aber du hast mehrere Möglichkeiten
Einerseits mit Array.Sort: http://msdn.microsoft.com/en-us/library/system.array.sort.aspx
Hier kannst du einen IComparer mitgeben, der dann festlegt wie sortiert werden soll.Oder mit Enumerable.OrderBy: http://msdn.microsoft.com/de-de/library/system.linq.enumerable.orderby.aspx
Hier kannst du das auch über ein Lambda bzw. 'ne Vergleichsfunktion regeln.Abgesehen davon würde ich aber zur Verwendung von List<T> raten. Das entspricht std::vector<T> in C++ und ist weitaus angenehmer als ein Array
-
Was hast du gegen 0815 Arrays ???
Danke für die Hilfe.
Gruß
-
AlexanderKiebler schrieb:
Was hast du gegen 0815 Arrays ???
Na ja, per se bin ich kein "Array-Nazi", aber es ist so, dass man mit List<T> idR viel besser unterwegs ist. Allein schon deshalb, weil sich der Container klug beim allokieren von weiterem Speicherplatz verhält, wenn man Elemente hinzufügt. Arrays haben halt ihre feste Größe und Array.Resize im Fall der Fälle. Wenn nie Elemente hinzugefügt oder entfernt werden und man auch nicht effizient darin suchen muss, dann kann man auch ein Array nehmen. Für alle anderen Fälle gibt's diverse Container.
-
Okay, danke. Für meinen Fall is ein Array aber schon am besten.
Es hat konstante Größe, muss einmal soritert werden
und wird dann immer der Reihe nach abgearbeitet als von 0 bis ende...Hab mich mit den Containern von C# noch nicht wirklich angefreundet muss ich zugeben,
würd für den Fall aber auch in c ein array nehmen. Nur da dann eben mergesort...
gruss
-
AlexanderKiebler schrieb:
Hab mich mit den Containern von C# noch nicht wirklich angefreundet muss ich zugeben
Ohne ne Diskussion anzufachen. Mich würde gerne mal deine Meinung dazu interessieren. Kannst du mal kurz darlegen warum du dich bisher noch nicht damit anfreunden konntest?
-
Also hier meint "Ich habe mich mit ihnen noch nicht angefreundet"
ich habe sie noch nicht oft genug verwendet um mir ein wirkliches Uteil bilden zu können.Was mich stört ist, dass ich momentan die algos dahinter noch nicht zuordnen kann. Hab zum Beispiel einfach keine Lust aus Unwissenheit ne logarithmische Laufzeit zu akzeptieren, wenn ich doch springen könnte etc...
Oder wann sind Teile auslagerbar... ??? etc...Container sind ja eingeführt worden, um das ständige reimplementieren von
Datenstrukturen zu vermeiden. Bei C# kann ich mir unter den Namen nicht so richtig vorstellen was sich dahinter verbirgt.Wobei man auch sagen muss, dass C# wohl nicht entwickelt worden ist, um die effizienz von algorithmen auf die Spitze zu treiben... Und für 0815 gebrauch sind die container klasse und im gesetzten Ramen geschwindigkeitsoptimal....
Wenn man die STL lieb gewonnen hat, mag man sie eben... =)....
wobei man auch da viele Datenstrukturen effizenter machen kann, wenn man sie Problemspezifisch implementiert....
-
Und wo ich gerade dabei bin mir eine ICompare Funktion zu schreiben....
Ich hoffe man braucht nicht die gleichheit zum ordnen, sonder es genügen die,< operatoren ???
Der Returnwert von ICompare ist int..... =(....
Also solche sachen machen mir Angst....
Wobei es wohl eben auch Gewohnheit sit =)...
-
Du kannst in C# genauso wie in C++ sämtliche operatoren überladen wie du das magst. Der rückgabewert int bei Compare ist auch nur ein vergleichskriterium. Aber dazu findest du mehr auf der MSDN, da wird erklärt wie das funktioniert. Und btw.: Die STL lebt teilweise in den C# algos weiter
Wenn dich die implementierungen interessieren dann kannst du dir das auch mit einem passenden Reflector anschauen
-
AlexanderKiebler schrieb:
Okay, danke. Für meinen Fall is ein Array aber schon am besten.
Es hat konstante Größe, muss einmal soritert werden
und wird dann immer der Reihe nach abgearbeitet als von 0 bis ende...Es gibt auch die SortedList<>, erleichtert das Sortieren. Danach einfach List<>.ToArray() aufrufen und Du hast dein fertig sortiertes Array.
Einfache Lösung, mit wenigen Zeilen implementierbar.
-
Sorry, is schon ein Array geworden...
Würde deine Liste verwenden, wenn die Größe Variabel wäre und ich sie vorher nicht kennen würde.... aber so.
EDIT:
Ah okay, sortiert Einfügen.... okay.... jetzt ists schon so
und zeitkritisch ists auch nicht was ich mache... danke für Hinweis