Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Mehrdimensionales Array sortieren ?


g1o2k4 - Fr 21.12.07 21:40
Titel: Mehrdimensionales Array sortieren ?
nabend


ich hab ein FELD array of array of String.
in der 2. dimension steht ein float wert.
also z.b. FELD[0][1] = 0,243875
also mit strtofloat in einen mathematischen ausdruck "castbar".
das feld will ich jetzt nach der 2. zeile sortieren. aber irgendwie klappt es nicht so recht


Delphi-Quelltext
1:
2:
type blablabla = array of array of String;
function test(bla: blablabla):blablabla;


das sollte ja klappen richtig ?
und wie sortiere ich das feld ?
noch als hinweis, es soll nicht die 2. spalte sortiert werden sondern, wenn er einen wert der 2. spalte woanders hinschiebt, dass er dann auch die 1. spalte mittauscht.

in der ersten spalte ([Zeile][0]) sind buchstaben und in der zweiten ([Zeile][1]) die werte, in meine fall sind es die auftrittswahrscheinlichkeiten der buchstaben.
ich möchte jetzt nach auftrittswahrscheinlichkeit sortieren -> also nicht nur die wahrscheinlichkeit sondern auch den wert mittauschen beim sortieren.


Yogu - Fr 21.12.07 22:38
Titel: Re: Mehrdimensionales Array sortieren ?
user profile icong1o2k4 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
type blablabla = array of array of String;
function test(bla: blablabla):blablabla;


Entweder ich kenne die Verschlüsslungsmethode nicht, oder du solltest ein bisschen genauer werden. Was soll die Fuktion Test denn machen? Und warum schreibst du nicht einfach die Parameter und den Rückgabewert rein, so dass man das auch lesen kann? Vielleicht kann ich dir dann helfen.


g1o2k4 - Fr 21.12.07 22:47

also ganz oben unter uses ist der feldtyp deklariert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type Mehrdimarray = array of array of String;

type
  TForm1 = class(TForm)
    MText: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
          M: integer;
          ZKette,TextS: String;

    { Public-Deklarationen }
.
.
.


dann wird bei buttonklick ein 2 dimensionales array aus dem text in nem memo feld errechnet.
das array sieht so aus.

Delphi-Quelltext
1:
Werte: Mehrdimarray;                    

Werte ist global im gesamten programm verfügbar.

die belegung sieht wie folgt aus: Werte[Buchstaben][Auftrittshäufigkeit]

die test funktion von oben heißt jetzt sortiere() und soll das feld nach den Auftrittshäufigkeiten, also nach der 2. Spalte sortieren...


ub60 - Fr 21.12.07 23:20

Zwei Tipps:
-Nimm doch einen Record, der aus einem String und einer Double-Variablen besteht. Dann musst Du nicht jedes mal umwandeln.
-Mit diesen Records kannst Du dann ein Array of Recordtyp machen. Wenn man die Werte vergleicht und tauschen muss, tauscht man gleich den ganzen Record.

ub60


g1o2k4 - Fr 21.12.07 23:35

user profile iconub60 hat folgendes geschrieben:
Zwei Tipps:
-Nimm doch einen Record, der aus einem String und einer Double-Variablen besteht. Dann musst Du nicht jedes mal umwandeln.
-Mit diesen Records kannst Du dann ein Array of Recordtyp machen. Wenn man die Werte vergleicht und tauschen muss, tauscht man gleich den ganzen Record.

ub60


super tipp danke !

mal schaun ob ich das sortieren mit dem record so hinbekomme....