Fórum Comando para Ordenar Arrays #331201

16/10/2006

0

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

Responder

Posts

16/10/2006

Marco Salles

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:


Responder

Gostei + 0

16/10/2006

Tida

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar