Tenho uma função que uso aqui e funciona bem. Veja se é isto que você precisa.
Código: Selecionar todos
function main
local a, b
cls
a:={'A','B','C'}
b:={'A','B','C'}
? "Comparando arrays com elementos tipo STRING"
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
a:={'A','B','C'}
b:={'A','B','C','D'}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
? "Comparando arrays com elementos e Sub-Elementos do tipo STRING / NUMERICO"
a:={'A','B','C',{1,2,3,"X"}}
b:={'A','B','C',{1,2,3,"X"}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
a:={'A','B','C',{1,2,3}}
b:={'A','B','C',{1,2,3,4}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
wait "Tecle ENTER..."
cls
a:={'A','B','C',{1,2,3,4,"X"}}
b:={'A','B','C',{1,2,3,4,"X"}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
a:={'A','B','C',{1,2,3,4,"X"}}
b:={'A','B','C',{1,2,3,4,"Z"}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
a:={'A','B','C',{1,2,3,4,"X",{"a",1}}}
b:={'A','B','C',{1,2,3,4,"X",{"a",1}}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
? "------------------------------------------------"
a:={'A','B','C',{1,2,3,4,"X",{"a",1}}}
b:={'A','B','C',{1,2,3,4,"X",{"a",2}}}
? hb_valtoexp(a) == hb_valtoexp(b), hb_valtoexp(a) + "==" + hb_valtoexp(b)
? iif( CompArray( a, b ), "Sao iguais!", "Sao Diferentes!" )
return NIL
******************
function CompArray( a1, a2 )
******************
local lRet := .T., v
if valtype(a1) != "A" .or. valtype(a1) != valtype(a2) .or. len(a1) != len(a2)
return .F.
endif
aeval( a1, {|e,i| iif( lRet, lRet := iif(( v := valtype(e)) == "A", CompArray( e, a2[i] ), v == valtype(a2[i]) .and. ( i = 1 .and. upper(hb_valtostr(e)) == upper(hb_valtostr(a2[i])) .or. e == a2[i] ) ), NIL ) } )
return lRet