안녕,
여러 연관 배열에 걸친 For Each 루프의 구문을 처리하는 데 어려움을 겪고 있습니다.
예를 들어:
q = ["q1"=>11, "q2"=>22, "q3"=>33];
w = ["w1"=>1111, "w2"=>2222, "w3"=>3333];
단일 어레이의 경우 참고용으로 다음을 수행하십시오.
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 values마찬가지로 두 어레이에서 어느 정도 작동합니다.
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"};그런 다음 추가로 드릴링합니다.
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";그러나 나는 가치도 얻고 싶습니다. 여러 가지 중괄호 그룹화 변형을 시도했지만 아무것도 작동하지 않습니다. 단일 배열 구문에서 보면 이것이 가장 분명한 것입니다:
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 ))RTFM 및 RTFF를 수행했지만 아무것도 찾을 수 없습니다.
물론 나는 이것을 할 수 있다:
For Each( { {a, b}, i }, Across( q, w ), show( i, a, b, q[a], w[b] ) );그러나 이것이 요점이 아닙니다. 그것은 우아함의 문제입니다.
어떤 아이디어가 있나요?
답장을 보내 주셔서 감사합니다. 언급했듯이 값을 쉽게 추출할 수 없는 것은 아닙니다. 단일 연관 배열의 경우 중첩 목록을 사용하여 값을 참조할 수도 있지만 여러 배열에 걸쳐 참조할 수는 없다는 점이 이상합니다.
https://www.jmp.com/support/help/en/17.2/#page/jmp/conditional-and-logical-functions.shtml?os=win&source=application#ww10169967
Across() 키워드를 사용하여 여러 컨테이너를 지정할 때 이름 목록에는 각 컨테이너의 값을 참조하는 이름 목록이 포함됩니다. 이름 목록의 첫 번째 항목에 있는 이름 수는 Across() 키워드에 지정된 컨테이너 수와 일치해야 합니다.
그리고 연관 배열의 경우
연관 배열 컨테이너의 경우 이름 목록에는 두 항목으로 구성된 이름 목록과 연관 배열의 각 항목 인덱스에 대한 이름이 포함됩니다.
그래서 당신이 제안한대로 가야한다고 생각합니다
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^"));
);
아니면 이와 비슷한 것일 수도 있습니다(약간 이상하게 느껴지기도 합니다).
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^"));
);
사용해야 할 몇 가지 구문이 있을 수 있지만 그것이 무엇일지 전혀 모르고 이와 같은 것이 가장 분명할 것이라는 데 동의합니다.
For Each({{{key1, val1}, {key2, val2}}, i}, Across(aa1, aa2), Show(i, key1, val1, key2, val2));