기본값과 동일한 값을 가진 연관 배열 및 키 제거Associative Arrays()와 가지고 있는 키를 사용할 때 기본값과 동일한 값을 가질 때 키가 사라질 수 있다는 새로운 동작(나를 위해)을 확인했습니다. 나는 Associative Array를 사용하여 다른 상태 메시지를 수집하고(기본값은 0으로 설정됨) 상태를 수집한 후 해당 연관 배열을 사용하여 사용자 인터페이스를 구축했기 때문에 이것을 알아차렸습니다.
연관 배열 만들기 다음 메모가 있으므로 예상되는 동작입니다.
메모: 키의 값이 기본값이면 모든 키가 기본값을 반환하므로 키가 삭제됩니다.
해당 메모가 진실을 담고 있지 않은 것으로 보이는 한 가지 예:
Names Default To Here(1);
aa = [=> 0];
aa["a"] += 0;
show(aa); // aa = ["a" => 0, => 0];
aa["a"] = 0;
show(aa); // aa = [=> 0];
왜 이런 식으로 작동하는지 아십니까? 이 동작(키가 삭제됨)으로 인해 모든 스크립트에서 동일한 동작을 수행하고 연관 배열.
편집하다:
기본값과 동일한 값을 가질 때 키가 전혀 제거되지 않는 것을 선호합니다. 이것은 어떤 타당한 이유(최적화?) 때문에 JMP에 깊숙이 내장되어 있을 가능성이 높기 때문에 변경되지 않을 것 같습니다.
자동화 및 스크립팅데이터 혼합 및 정리Re: 연관 배열 및 기본값과 동일한 값을 가진 키 제거JMP 지원팀에서 이와 관련하여 꽤 많은 답변을 얻었습니다. 그에 대한 요약을 작성해 보겠습니다.
나의 지원 질문
가능하다면 JMP의 연관 배열이 기본값을 사용하는 것처럼 작동하는 이유를 이해하고 싶습니다. 기본값과 동일한 값을 가지면 키를 삭제합니다. 또한 왜 이렇게 행동하지 않는지 언제나? 나는 이것에 대해 커뮤니티에 게시했습니다 https://community.jmp.com/t5/Discussions/Associative-arrays-and-removal-of-keys-with-value-same-as/td-p/461239
의도한 대로 작동하지 않는 동작이 있는 테스트 스크립트(제 생각에는):
Names Default To Here(1);
aa = [=> 0];
aa["a"] += 0;
show(aa); // aa = ["a" => 0, => 0];
aa["a"] = 0;
show(aa); // aa = [=>0];
지원 답변 요약:
R&D에서 받은 답변을 여러분과 공유하고 싶었습니다. 이 동작은 데이터 구조를 사용하여 모델링 세트 및 세트 작업의 일부로 연관 배열에서 구현되었습니다. 귀하가 강조한 특정 불일치는 향후 릴리스(JMP-776)에서 해결될 것입니다.
나는 또한 그들에게 내가 문제를 발견한 상황과 매우 가까운 "예제"를 제공했고 그들은 나에게 이 스크립트를 제공했습니다(이미 다른 방법으로 수정/해결했지만 이것도 공유하겠습니다).
아래는 연관 배열에 대한 기본값을 사용하지 않지만 배열에 존재하지 않는 키를 사용하여 처리하는 예제의 약간 수정된 버전입니다. 이 예에서 알고리즘은 아이콘이 항상 적절한 설명과 정렬되도록 합니다.
Names Default To Here(1);
//init aa
aa_status = Associative Array();
aa_status["Connection Check"] = "0";
aa_status["Folder found"] = "";
aa_status["To Delete"] = "1";
New Window("test",
Table Box(
des_ref = String Col Box("Description", aa_status << get keys),
cb_ref = Col Box("Status", {}),
)
);
//aa_status["Folder found"] = "0";
aa_status << Remove Item("To Delete");
For Each({val}, des_ref << Get,
If(Try(aa_status[val] == "0", 1),
cb_ref << Set({Icon Box("Excluded")});
,
cb_ref << Set({Icon Box("CheckCircle")});
)
);
Re: 연관 배열 및 기본값과 동일한 값을 가진 키 제거몰라. 내가 기대하는 행동도 아닙니다.
aa = [=> 0];
aa["a"] += 0;
show(aa); // aa = ["a" => 0, => 0];
aa["a"] -= aa["a"] ;
show(aa); // aa = ["a" => 0, => 0]; ! good ?
내 일반적인 사용법은 +=1 만 사용하여 발생 횟수를 계산한다는 점을 제외하고는 비슷하므로 절대 볼 수 없습니다.
또한 초기 값에 { }, [ ] 또는 [ => ]를 사용하지 마십시오. 예상대로 작동하지 않지만 문제에 대한 정보를 제공할 수 있습니다(요소를 추가하지 않고 기본값을 변경함).
미래 보장을 위해 이것이 더 나은 방향으로 변경되는 경우 명시적 <