Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Ordnen vo Zahlen

  Alt 19. Mai 2006, 19:23
Hallo.

Die Sortierung innerhalb der ListBox ist ja immer noch nicht gelöst. Im Array muss zur Bestimmung der Ordnungszahl einer Karte eine lineare Suche erfolgen. Hier noch eine Alternative. Die Ordnungszahl wird über eine Funktion StrToValue() bestimmt, die an verschiedene Regeln angepasst werden kann.

Delphi-Quellcode:
function CompareInteger(i1, i2: Integer): Integer;
begin
  if i1 < i2 then Result := -1 else
  if i1 > i2 then Result := 1 else
  Result := 0;
end;

function StrToValue(name: String): Integer;
const
  FARBEN = '.KA.HE.PI.KR.';
  WERTE = '.7.8.9.D.K.10.A.';
begin
  name := Uppercase(name);
  Result := Pos(Copy(name, 1, 2), FARBEN) shl 8
    + Pos(Copy(name, 3, 2), WERTE);
end;

function CustomCompare(sl: TStringList; index1, index2: Integer): Integer;
begin
  Result := CompareInteger(StrToValue(sl[index1]), StrToValue(sl[index2]));
end;

procedure SortValues(lb: TListBox);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Assign(lb.Items);
  sl.CustomSort(CustomCompare);
  lb.Items.Assign(sl);
  sl.Free;
end;

procedure TDemoForm.SortButtonClick(Sender: TObject);
begin
  ListBox.Items.CommaText := 'krK,kr7,kaA,he9,piD';
  SortValues(ListBox);
  ShowMessage(ListBox.Items.Text);
end;
Viel Spaß beim Analysieren

marabu
  Mit Zitat antworten Zitat