=> array equal

Une méthode pour savoir si 2 tableaux sont identiques en nombre de lignes et de valeurs, indépendamment du tri. Je souhaitais pour des tableaux de grande taille éviter une boucle sur les valeurs.

Suggestions d’amélioration, critiques, foutage de honte public, etc. sont bienvenus.

<code 4D>
//Arr_equal (arr1_p;arr2_p) -> bool
//$0 vrai si 2 tableaux sont égaux en taille et en contenu
C_BOOLÉEN($0)
C_POINTEUR($1;$2)
$0:=Faux
$arr1_p:=$1
$arr2_p:=$2
Si (Taille tableau($arr1_p->)=Taille tableau($arr2_p->))
TRIER TABLEAU($arr1_p->;>)
TRIER TABLEAU($arr2_p->;>)
C_BLOB($blb1_x;$blb2_x)
VARIABLE VERS BLOB($arr1_p->;$blb1_x)
VARIABLE VERS BLOB($arr2_p->;$blb2_x)
$digest1_t:=Generer digest($blb1_x;Digest SHA1)
$digest2_t:=Generer digest($blb2_x;Digest SHA1)
$0:=($digest1_t=$digest2_t)
Fin de si
//_
</code 4D>

tests unitaires
<code 4D>
TOUT SÉLECTIONNER([maTable])
SÉLECTION VERS TABLEAU([maTable]PK;$pk1_al)
COPIER TABLEAU($pk1_al;$pk2_al)
ASSERT(Arr_equal (->$pk1_al;->$pk2_al))
$pk2_al{0}:=1
ASSERT(non(Arr_equal (->$pk1_al;->$pk2_al)))
COPIER TABLEAU($pk1_al;$pk2_al)
supprimer dans tableau($pk2_al;taille tableau($pk2_al))
ASSERT(non(Arr_equal (->$pk1_al;->$pk2_al)))
</code 4D>