關聯數組和刪除與默認值相同的鍵只是注意到新的行為(對我來說),當使用 Associative Arrays() 且您擁有的鍵與默認值具有相同的值時,該鍵可能會消失。 我注意到這一點是因為我使用關聯數組來收集不同的狀態消息(默認值設置為 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 中,以至於我懷疑它不會改變
自動化和腳本編寫數據混合和清理回复:關聯數組和刪除值與默認值相同的鍵我確實從 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];
支持人員的答复摘要:
我只是想與您分享我從研發部門收到的答案:這種行為是在關聯數組中實現的,作為數據結構建模集和集合操作的一部分。 您強調的特定不一致問題將在未來版本 (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")});
)
);
回复:關聯數組和刪除值與默認值相同的鍵不知道。 這也不是我所期望的行為。
aa = [=> 0];
aa["a"] += 0;
show(aa); // aa = ["a" => 0, => 0];
aa["a"] -= aa["a"] ;
show(aa); // aa = ["a" => 0, => 0]; ! good ?
我的正常用法類似,只是我只使用 +=1 來計算出現次數,所以我永遠不會看到它。
另外,請勿使用 { }、[ ] 或 [ => ] 作為初始值。 它不會按您期望的方式工作,儘管它可能會闡明該問題(它會更改默認值而不添加元素。)
為了面向未來,如果情況變得更好,我會使用顯式 <