Comando para Ordenar Arrays

Delphi

16/10/2006

Olá

Existe algum comando para ordenar vetores no delphi, se sim, gostaria que alguém desse um pequeno exemplo de como ordenar vetor bidimensional, exemplo 10 linhas duas colunas. Obrigado.


Tida

Tida

Curtidas 0

Respostas

Marco Salles

Marco Salles

16/10/2006

usando callback

unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls; 

type 
  TClientes = class 
  private 
    FNome: string; 
    FEndereco: string; 
    procedure SetNome(const Value: string); 
    procedure SetEndereco(const Value: string); 
  public 
    property Nome: string read FNome write SetNome; 
    property Endereco: string read FEndereco write SetEndereco; 
  end; 

  TForm1 = class(TForm) 
    ListBox1: TListBox; 
    Label1: TLabel; 
    Button1: TButton; 
    Button2: TButton; 
    procedure Button2Click(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure FormShow(Sender: TObject); 
  private 
    FListaClientes: TList; 
    lCliente1, lCliente2, lCliente3: TClientes; 
    procedure SetListaClientes(const Value: TList); 
  private 
    { Private declarations } 
    property ListaClientes: TList read FListaClientes write SetListaClientes; 
    procedure EncheListaClientes; 
    procedure AtualizaListBox; 
  public 
    { Public declarations } 
  end; 

var 
  Form1: TForm1; 

function ClassificaPorNome(item1: Pointer; item2: Pointer): integer; 
function ClassificarPorEndereco(item1: Pointer; item2: Pointer): integer; 

implementation 

{$R *.dfm} 

{ TClientes } 

procedure TClientes.SetEndereco(const Value: string); 
begin 
  FEndereco := Value; 
end; 

procedure TClientes.SetNome(const Value: string); 
begin 
  FNome := Value; 
end; 

{ TForm1 } 

procedure TForm1.SetListaClientes(const Value: TList); 
begin 
  FListaClientes := Value; 
end; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
  ListaClientes := TList.Create; 
  EncheListaClientes; 
  AtualizaListBox; 
end; 

procedure TForm1.EncheListaClientes; 
begin 
  lCliente1 := TClientes.Create; 
  lCliente1.Nome := ´Paulo´; 
  lCliente1.Endereco := ´Av. Joao Pereira Barreto´; 
  ListaClientes.Add(lCliente1); 

  lCliente2 := TClientes.Create; 
  lCliente2.Nome := ´Andre´; 
  lCliente2.Endereco := ´Av. Ayrton Senna´; 
  ListaClientes.Add(lCliente2); 

  lCliente3 := TClientes.Create; 
  lCliente3.Nome := ´Jair´; 
  lCliente3.Endereco := ´Rua Dom Pedro I´; 
  ListaClientes.Add(lCliente3); 
end; 

procedure TForm1.AtualizaListBox; 
var 
 lIndex: integer; 
begin 
  ListBox1.Items.Clear; 
  for lIndex := 0 to ListaClientes.Count -1 do 
      ListBox1.Items.Add(TClientes(ListaClientes[lIndex]).Nome + ´-´ + TClientes(ListaClientes[lIndex]).Endereco); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  ListaClientes.Sort(@ClassificaPorNome); 
  AtualizaListBox; 
end; 

function ClassificarPorEndereco(item1, item2: Pointer): integer; 
begin 
  result := CompareText(TClientes(item1).Endereco, TClientes(item2).Endereco); 
end; 

function ClassificaPorNome(item1, item2: Pointer): integer; 
begin 
  result := CompareText(TClientes(item1).Nome, TClientes(item2).Nome); 
end; 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
  ListaClientes.Sort(@ClassificarPorEndereco); 
  AtualizaListBox; 
end; 

end.


se não me engano ja lhe enviei algo em outro tópico... Mas voce não deu a minima :cry: :cry: :cry: :cry:


GOSTEI 0
Tida

Tida

16/10/2006

Me perdoe amigo

Valeu pela força, realmente me descuidei e mandei outra pergunta antes de visualizar se havia alguma resposta, obrigado mais uma vez pela ajuda, um abraço.


GOSTEI 0
POSTAR