Sortieren von Arrays Alphabetisch?
Sagen, ich habe zwei arrays von string, mit dem Namen 'arrayone' und 'arraytwo'
Wie würde ich mich über die Sortierung der 'arrayone' alphabetisch (A bis Z), während immer noch halten die Beziehungen zu meiner zweiten array.
Incase Sie sich Fragen, was ist in 'arrayone' und 'arraytwo', 1 hat, Familiennamen und 2 hat das Alter der einzelnen person. Mein Ergebnis ist, um es in ein richedit.
Beispiel-Szenario:
Smith 25
Appleseed 32
Gibbs 45
Muss wiederum in:
Appleseed 32
Gibbs 45
Smith 25
Bitte keine stringlist, halten Sie es in einem einfachen array und in einem Verfahren.
UPDATE: ich wechselte zu erfassen.
Versucht, diesen code mit ohne Erfolg
for i := 0 to 26 do
for j := 0 to 26 do
if recordname.surname[j] > recordname.surname[j+1] then begin
line := recordname.surname[j];
line[j] := recordname.surname[j+1];
recordname.surname[j+1] := line;
end;
Er sagt Inkompatible Typen: 'Char' und 'String'
Deine Datenstruktur falsch ist. Sie müssen nicht zwei arrays. Sie haben ein einzelnes array, und jedes element ist ein name-Wert-paar. Bitte die Umstellung auf die richtige Struktur der Daten, bevor Sie fortfahren.
Ich habe zwei arrays. Wie würde ich mich über die Zusammenführung dieser in ein multi-dimensionales array und dann auf fortsetzen?
Sie möchten
Ich Schreibe gerade an einem BubbleSort. Nicht viel, so weit noch nicht
Okay, Wie würde ich wechseln, die 2 arrays in einem array speichern?
Ich habe zwei arrays. Wie würde ich mich über die Zusammenführung dieser in ein multi-dimensionales array und dann auf fortsetzen?
Sie möchten
array of record
. In modernen Delphi-verwenden Sie TList<TStringIntegerPair>
.Ich Schreibe gerade an einem BubbleSort. Nicht viel, so weit noch nicht
Okay, Wie würde ich wechseln, die 2 arrays in einem array speichern?
InformationsquelleAutor noob | 2011-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben haben, Sie Beratung rund um Ihr Daten-Struktur, gesehen und die anschließenden Kämpfe, ich will, dass die Dinge gerade und deutlicher erklären, was ich meine.
Ursprünglichen code hatte zwei arrays, waren im wesentlichen nicht verbunden sind. Sie könnte die swap-Objekte in einem array und einfach vergessen, dies zu tun aus dem anderen array. Es sieht für mich wie der name/Alter Paare sollten wirklich nicht aufspalten. Dies führt zu der folgenden Typ-Deklaration.
Nun müssen Sie halten eine Reihe von
TPerson
.Verwenden, um eine Art, die Sie benötigen, um in der Lage sein, zu vergleichen zwei Artikel, und tauschen Sie.
Nun können wir all dies zusammen mit einem bubble-sort.
Nun, wenn Sie wollten mit einem komplexeren Vergleichsoperator dann könnte man Sie einfach ersetzen
Compare
. Zum Beispiel, wenn Sie wollten, um nach Alter alle Menschen, die den gleichen Namen haben, dann verwenden Sie ein lexikographischer Vergleich-Funktion.Habe ich geschrieben, dass diese Antwort Stück für Stück, und das ist, wie Sie sich nähern sollen, ein größeres problem wie dieses. Versuchen Sie, es zu brechen in kleinere Stücke, von denen jeder ist überschaubar.
Bubble sort ist nur ein performance-Alptraum. Aber was solls, ich weiß, das ist für den didaktischen Zweck hier, und Sie haben eine klare Antwort auf eine verwirrte Frage.
Vereinbart.
Aufruf CompareText in eine lange Schleife ist etwa 3-mal langsamer als casting die record-string direkt (getestet), sind Sie besser dran, nur tun, "wenn jemand[ein].name < person[b].name" direkt in der Schleife zu fordern, anstatt CT immer noch inline ist, die Herangehensweise ist immer noch langsamer.
CompareText ist der groß-und Kleinschreibung. Wenn du gehst, zu vergleichen zwei Methoden, stellen Sie sicher, Sie tun die gleiche Sache; Sie müssten, um es zu ändern, um
CompareStr
oder schreibenif LowerCase(person[a].name) < LowerCase(person[b].name)
.InformationsquelleAutor David Heffernan
Unserer
TDynArray
wrapper einfach behandeln, diese Funktion ausdrücklich zu.Sortieren Sie alle vorhandenen dynamischen Arrays direkt im Ort, oder mit der ein integer-array der Indizes, mit einer benutzerdefinierten Sortierfunktion.
Durch die Art und Weise, die Sort-Methode der wrapper wird eine optimierte Quick Sort, die ist viel schneller als Bubble-Sort-Algorithmus.
Gibt es viel mehr features in dieser wrapper, z.B. TList-wie Methoden wie Add() oder Delete(), die Nutzung einer externen Count-variable (viel schneller hinzufügen), Serialisierung oder schnelle suchen mit hashing.
Es funktioniert ab Delphi 5-XE2, und ist Open Source.
InformationsquelleAutor Arnaud Bouchez
Ohne die Schaffung einer neuen Struktur, enthält beide Sätze von Daten-Punkte können Sie ein array Sortieren von Indizes mit einem Vergleich-Funktion, die prüft, basierend auf arrayone.
konkret, erstellen Sie ein array
indices
mitindices[i] = i
zunächst.Dann Sortieren
indices
mit der Vergleich-FunktionDann Lesen
arrayone[indices[0]], arrayone[indices[1]] ...
gibt Ihnen die sortierte Liste und die entsprechenden Werte sindarraytwo[indices[0]], arraytwo[indices[1]], ...
FWIW richtige syntax:
if arrayone[indices[i]] < arrayone[indices[j]] then Result := 1 else if arrayone[indices[i]] > arrayone[indices[j]] then Result := -1 else Result := 0;
, aber richtig formatiert natürlich. Keine Notwendigkeit zu prüfen, wenn i < j hier.Die Linie
i < j iff ...
ist wahrscheinlich in einer anderen Sprache, nämlich die Sprache der Mathematik (mit einigen Elementen der pseudocode). Wie Sie wahrscheinlich wissen,iff
steht für 'wenn', das heißt, eine logische äquivalenz.Sie nicht angeben, welche delphi-version Sie verwenden, so dass ich nur gab eine high-level Beschreibung
Ich habe nicht die Frage. Die syntax ist eigentlich die gleiche für alle Versionen von Delphi, also die genaue version ist egal.
InformationsquelleAutor Foo Bah
Art das erste array als normal, mit dem Sortieralgorithmus Ihrer Wahl. Eine Einführung Algorithmus lehrbuch wird mehrere. Jedes mal, wenn Sie tauschen Sie zwei Einträge des ersten Arrays, die das gleiche machen ändern der entsprechenden Einträge des zweiten Arrays.
InformationsquelleAutor Rob Kennedy