Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
cetics Novato
Registrado: Terça-Feira, 8 de Novembro de 2011 Mensagens: 40
|
Enviada: Qui Jan 30, 2014 1:41 pm Assunto: Comparar array |
|
|
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 |
|
|
leandroksc Profissional
Registrado: Quinta-Feira, 29 de Setembro de 2011 Mensagens: 528
|
Enviada: Qui Jan 30, 2014 6:25 pm Assunto: |
|
|
Amigo, fiz algumas pesquisas e pelo que vi, a única forma é comparando item a item do array. |
|
Voltar ao Topo |
|
|
r.skol@live.com Novato
Registrado: Sexta-Feira, 6 de Dezembro de 2013 Mensagens: 19
|
Enviada: Qui Jan 30, 2014 7:29 pm Assunto: |
|
|
não entendi o que vc quer.
Vc quer gerar um relatório de todas as arrays iguais ? |
|
Voltar ao Topo |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Sex Jan 31, 2014 12:59 am Assunto: |
|
|
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 |
|
|
claudio.ferreira Profissional
Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
|
Voltar ao Topo |
|
|
claudio.ferreira Profissional
Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Sex Jan 31, 2014 10:02 am Assunto: |
|
|
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 |
|
|
marcieldeg Colaborador
Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Sex Jan 31, 2014 10:10 am Assunto: |
|
|
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 |
|
|
cetics Novato
Registrado: Terça-Feira, 8 de Novembro de 2011 Mensagens: 40
|
Enviada: Qui Fev 06, 2014 2:00 pm Assunto: |
|
|
Obrigado pessoal, era essa mesmo a minha dúvida, obrigado por responderem. vou utilizar as formas apresentadas. |
|
Voltar ao Topo |
|
|
|