ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Comparar array

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
cetics
Novato
Novato


Registrado: Terça-Feira, 8 de Novembro de 2011
Mensagens: 40

MensagemEnviada: Qui Jan 30, 2014 1:41 pm    Assunto: Comparar array Responder com Citação

Oi pessoal,

gostaria de saber se existe algum método mais eficaz de comparação de arrays. tipo assim:

if array1 = array2 then showmessage('Igual.');

estou utilizando um método de loops vara verificar cada "bloco" do array1 e o array2 individualmente. por exemplo:

for cont:=...etc..
if array1[cont] = array2[cont] then showmessage etc...

mas eu queria comparar o array todo de uma vez, existe alguma forma mais eficaz?

obrigado a todos.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leandroksc
Profissional
Profissional


Registrado: Quinta-Feira, 29 de Setembro de 2011
Mensagens: 528

MensagemEnviada: Qui Jan 30, 2014 6:25 pm    Assunto: Responder com Citação

Amigo, fiz algumas pesquisas e pelo que vi, a única forma é comparando item a item do array.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
r.skol@live.com
Novato
Novato


Registrado: Sexta-Feira, 6 de Dezembro de 2013
Mensagens: 19

MensagemEnviada: Qui Jan 30, 2014 7:29 pm    Assunto: Responder com Citação

não entendi o que vc quer.
Vc quer gerar um relatório de todas as arrays iguais ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Sex Jan 31, 2014 12:59 am    Assunto: Responder com Citação

Uma forma que fuga de 1 ou 2 estrutura(s) de loop(s) em delphi não existe, enquanto nas linguagens que permite tal comparação as mesma trata o array como um objeto.

Mas para não ficar desanimado pode criar uma função que retorne verdadeiro ou falso as comparações de dois arrays.

É nesta função que vai a chave para uma comparação rápida ou lenta pois existe n forma de ser montada, vai muito do tipo de dados que são destes arrays em questão.

vou mostrar duas que usa o byte como o tipo de dado dos arrays.

Código:
function ComprareArray1(A, B: array of byte): boolean;
var
  x, y: integer;
begin
  result := false;
  for x := Low(A) to High(A) do
  begin
    for y := Low(B) to High(B) do
    begin
      result := A[x] = B[y];
      if result then
        break;
    end;
    if not result then
      break;
  end;
end;

function ComprareArray2(A, B: array of byte): boolean;
var
  x: integer;
begin
  result := true;
  for x := Low(A) to High(A) do
  begin
    result := A[x] = B[x];
    if not result then
      break;
  end;
end;


A primeira função retorna verdadeiro se o primeiro array possuir os mesmo elementos do segundo array SEM IMPORTAR COM ORDEM dos elementos.

A segunda função retorna verdadeiro se o primeiro array possuir os mesmo elementos do segundo NA MESMA ORDEM dos elementos.

Como estas existe n forma de montar sua função, uma melhor que a outra e outras piores que tudo, umas mais rápida outras mais lentas.

Código:
if ComprareArray1(array1,array2) then showmessage('possui o mesmos elementos');

if ComprareArray2(array1,array2) then showmessage('são iguais');
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Sex Jan 31, 2014 10:01 am    Assunto: Responder com Citação

..
_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain


Editado pela última vez por claudio.ferreira em Sex Jan 31, 2014 10:05 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Sex Jan 31, 2014 10:02 am    Assunto: Responder com Citação

Faça comparação do conteúdo da memória dos dois :

Código:
Uses Sysutils;

Var
      a, b : array [0..100] of byte;
     Cont : integer;
Begin
     for cont := 0 to 100 do Begin
          a1 [cont] := 0;
          b1 [cont] := 0;
    End;

     a1 [100] := 23;
     b1 [100] := 23;
     If CompareMem(@a1, @b1, Sizeof (a1))  Then
        ShowMessage ('iguais')
     Else
        ShowMessage ('diferentes')

_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Sex Jan 31, 2014 10:10 am    Assunto: Responder com Citação

Eu adicionaria uma validação adicional à solução do Cláudio:

Código:
  If (SizeOf(a1) = SizeOf(a2)) and CompareMem(@a1, @b1, SizeOf(a1)) then
    ShowMessage ('iguais')
  else
    ShowMessage ('diferentes');
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cetics
Novato
Novato


Registrado: Terça-Feira, 8 de Novembro de 2011
Mensagens: 40

MensagemEnviada: Qui Fev 06, 2014 2:00 pm    Assunto: Responder com Citação

Obrigado pessoal, era essa mesmo a minha dúvida, obrigado por responderem. vou utilizar as formas apresentadas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB