[R] Arrays égaux mais différents.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

[R] Arrays égaux mais différents.

#1

Message par blacksoul305 »

Bonjour,

j'ai très longuement hésité à poser cette question, mais puisque mes recherches ne m'ont pas donné de réponses et que ma logique ne me permet pas d'expliquer ce comportement, je me sens forcé de créer un sujet.

Je me suis remis à programmer il y a deux semaines environ et me retrouve aujourd'hui dans un de mes projets à devoir comparer deux arrays. Selon si les arrays sont égaux ou pas, l'algorithme agit différemment... seulement il n'agissait pas comme il le devait sans raison apparente, et je viens de trouver pourquoi. Pour être sûr, j'ai créé un script indépendant et pour le coup, je suis resté stupéfait.

Code : Tout sélectionner

#include <Array.au3>

Local $arrayA[4] = [1,2,3,4], $arrayB = $arrayA

_ArrayDisplay($arrayA)
_ArrayDisplay($arrayB)
If $arrayA <> $arrayB Then MsgBox(0,"","different")
If $arrayA = $arrayB Then MsgBox(0,"","égal")
If $arrayA == $arrayB Then MsgBox(0,"","strictement égal") ; ajoutée dernièrement
Dans le code ci-dessus, je déclare un premier tableau, puis un second qui a pour obligation d'être égale au premier. Et bien ce que j'ai en retour c'est un test positif pour "<>" et négatif pour "=".

Tout en rédigeant ce message, j'ai pensé à essayer le strictement égal "==", et là c'est encore mieux, le test est positif.

Je résume, je déclare un tableau quelconque, un second tableau qui vaut le premier, et ils sont au final strictement égaux et différents ! :D

Du coup je m'en remets à vous, car là je peine à trouver une raison, que ce soit dans l'aide, sur le forum US ou ce forum. Merci d'avance et bonne journée !
Modifié en dernier par blacksoul305 le jeu. 07 août 2014 18:06, modifié 1 fois.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Arrays égaux mais différents.

#2

Message par jchd »

Les tests de comparaison (donc d'égalité a fortiori) ne fonctionnent que sur des variables simples, pas des tableaux.

J'au un petit quelque chose pour comparer des tableaux, mais seule la méthode 8 permet de comparer récursivement toute imbrication (tableau ou map dans tableau). Les commentaires sont laissé de côté à titre d'exercice. Ne fonctionne qu'avec la beta à cause du type Map et des fonctions associées.
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Arrays égaux mais différents.

#3

Message par blacksoul305 »

Bonjour jchd et merci beaucoup pour la réponse. Donc du coup c'est quelque chose de normal, je ne suis pas censé considérer ça comme un bug ?

J'ai vraiment eu du mal à trouver d'où venait le problème car le code est assez conséquent, et la comparaison des deux tableaux était la seule ligne dont je ne pouvais douter.. manque de pot c'est celle qui posait problèmes haha !

Bref, je vais me monter une fonction pour faire ma comparaison de tableau qui est relativement simple, néanmoins il n'y aurait pas un lien, un endroit où il serait noté explicitement le fait que la comparaison entre tableaux ne soit pas possible via de simples opérateurs ? D'ailleurs, j'y pense mais les résultats des tests donnent positif, négatif, positif. Si jamais la comparaison ne fonctionnait pas, tous les tests auraient du me renvoyer la même réponse, non ?

Merci encore !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Arrays égaux mais différents.

#4

Message par jguinch »

Un truc simple (pour des tableaux simples uniquement) :

Code : Tout sélectionner

#include <Array.au3>

Local $arrayA[4] = [1,2,3,4], $arrayB = $arrayA

If _ArrayToString($arrayA) <> _ArrayToString($arrayB) Then MsgBox(0,"","different")
If _ArrayToString($arrayA) = _ArrayToString($arrayB) Then MsgBox(0,"","égal")
If _ArrayToString($arrayA) == _ArrayToString($arrayB) Then MsgBox(0,"","strictement égal") ; ajoutée dernièrement
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Arrays égaux mais différents.

#5

Message par jchd »

La doc implique faiblement que cette comparaison n'est pas valide, dans Language Reference - Operators >> Comparison operators :
= Tests if two values are equal
Un tableau n'est pas une "value" (n'est pas un type admis pour un variant).

J'admets que cette indication est pour le moins ténue, d'autant plus que l'assignation de tableaux fonctionne (et ça c'est dit explicitement).

Ne disposant pas des sources je ne peux dire quel code est prévu pour = et <>. Par contre dans le cas de == il est clair que les deux valeurs font appel à la méthode prévue pour la conversion en chaîne, comme quand tu fais un ConsoleWrite d'un tableau.

Il est hors de question de lever une erreur (@error) dans le cas de mauvais emploi d'opérateurs, mais je vais voir comment on peut préciser la doc.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Arrays égaux mais différents.

#6

Message par blacksoul305 »

jguinch : Bonjour, merci pour l'astuce, j'essayerai d'y penser si jamais je dois faire la même chose avec des tableaux simples, ça me simplifiera vachement la tâche !

jchd : Oui, en effet j'aurais du titler sur le mot "value" !

En tout cas merci beaucoup pour les éclaircissements ! Les résultats me paraissaient vraiment impressionnants, là je comprends un peu mieux la chose ! Du coup, si vous avez des infos supplémentaires comme le fonctionnement de la comparaison "=" ou "<>" ou si jamais il y a un ajout au niveau de la doc à ce propos, faut pas hésiter !

Résolu, merci de votre aide !
Étudiant en 2ème année de Licence Informatique.
Répondre