Salut,
J'ai du mal avec la syntaxe d'une boucle For Each sur plusieurs tableaux associatifs.
Par exemple:
q = ["q1"=>11, "q2"=>22, "q3"=>33];
w = ["w1"=>1111, "w2"=>2222, "w3"=>3333];
Pour un seul tableau, juste pour référence :
For Each( {a, i}, q, Show( i, a ) ); // retrieves indices and keys
For Each( { {a, b}, i }, q, Show( i, a, b ) ); // retrieves indices, keys and valuesDe manière analogue, sur deux tableaux, cela fonctionne dans une certaine mesure :
For Each( {a, i}, Across( q, w ), show( i, a ) );<BR />// retrieves indices and two-item lists of keys of both arrays:
i = 1;
a = {"q1", "w1"};
i = 2;
a = {"q2", "w2"};
i = 3;
a = {"q3", "w3"};Puis forez plus loin :
For Each( { {a, b}, i }, Across( q, w ), show( i, a, b ) );<BR />// retrieves indices and keys of both arrays separately:
i = 1;
a = "q1";
b = "w1";
i = 2;
a = "q2";
b = "w2";
i = 3;
a = "q3";
b = "w3";Cependant, je veux aussi obtenir des valeurs. J'ai essayé plusieurs variantes de regroupements d'accolades et rien ne fonctionne. En s'appuyant sur la syntaxe d'un tableau unique, celle-ci devrait être la plus évidente :
For Each( { { {a, b}, {c, d} }, i }, Across( q, w ), show( i, a, b, c, d ) );<BR />// returns error:<BR />argument value is invalid in access or evaluation of 'For Each' , Bad Argument( {a, b} ), For Each/*###*/({{{a, b}, <BR />{c, d}}, i}, Across( q, w ), Show( i, a, b, c, d ))J'ai lu RTFM et RTFF et je n'ai rien trouvé.
Bien sûr, je peux faire ceci :
For Each( { {a, b}, i }, Across( q, w ), show( i, a, b, q[a], w[b] ) );mais là n'est pas la question. C'est une question d'élégance.
Des idées?
Merci pour la réponse. Comme mentionné, ce n'est pas que je ne puisse pas facilement extraire les valeurs. Je trouve juste étrange que pour un seul tableau associatif, il soit également possible de référencer les valeurs à l'aide d'une liste imbriquée, mais pas sur plusieurs tableaux.
https://www.jmp.com/support/help/en/17.2/#page/jmp/conditional-and-logical-functions.shtml?os=win&source=application#ww10169967
Lors de la spécification de plusieurs conteneurs à l'aide du mot-clé Across() , la liste des noms contient une liste de noms faisant référence aux valeurs de chaque conteneur. Le nombre de noms dans le premier élément de la liste de noms doit correspondre au nombre de conteneurs spécifié dans le mot-clé Across() .
Et pour le tableau associatif
Pour un conteneur de tableau associatif , la liste de noms contient une liste de deux éléments de noms et un nom pour l'index de chaque élément du tableau associatif.
Donc je pense que tu dois opter pour quelque chose comme tu l'as suggéré
Names Default To Here(1);
aa1 = ["q1" => 11, "q2" => 22, "q3" => 33];
aa2 = ["w1" => 1111, "w2" => 2222, "w3" => 3333];
For Each({{key1, key2}, i}, Across(aa1, aa2),
val1 = aa1[key1];
val2 = aa2[key2];
Print(Eval Insert("\!Ni = ^i^"));
Print(Eval Insert("key1 = ^key1^, val1 = ^val1^"));
Print(Eval Insert("key2 = ^key2^, val2 = ^val2^"));
);
ou peut-être quelque chose comme ça (ce qui semble aussi un peu bizarre)
Names Default To Here(1);
aa1 = ["q1" => 11, "q2" => 22, "q3" => 33];
aa2 = ["w1" => 1111, "w2" => 2222, "w3" => 3333];
For Each({{key1, key2, val1, val2}, i}, Across(aa1, aa2, aa1 << get values, aa2 << get values),
Print(Eval Insert("\!Ni = ^i^"));
Print(Eval Insert("key1 = ^key1^, val1 = ^val1^"));
Print(Eval Insert("key2 = ^key2^, val2 = ^val2^"));
);
Il y a peut-être une syntaxe qui devrait être utilisée, mais je n'ai aucune idée de ce que cela pourrait être et je suis d'accord que quelque chose comme celle-ci serait probablement la plus évidente.
For Each({{{key1, val1}, {key2, val2}}, i}, Across(aa1, aa2), Show(i, key1, val1, key2, val2));