cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Discussions

Solve problems, and share tips and tricks with other JMP users.
%3CLINGO-SUB%20id%3D%22lingo-sub-825328%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%C2%BFC%C3%B3mo%20iterar%20sobre%20una%20lista%20de%20matrices%20asociativas%20agrupadas%20por%20valores%20clave%20espec%C3%ADficos%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-825328%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EDigamos%20que%20tengo%20una%20lista%20de%20matrices%20asociativas.%3C%2FP%3E%3CP%3EQuiero%20iterar%20sobre%20esta%20lista%20por%20grupos.%20Primero%20por%20categor%C3%ADa%20y%20luego%2C%20en%20un%20bucle%20anidado%2C%20por%20subcategor%C3%ADa.%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3Eaalist%20%3D%20%7B%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22123%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22124%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22125%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22124%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22125%22%0A%09%5D%0A%09%2C%0A%09%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%09%0A%09%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%09%0A%09%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EEsto%20significa%20que%20en%20mi%20primer%20bucle%20de%20la%20primera%20iteraci%C3%B3n%20obtengo%20una%20lista%20de%20matrices%20asociativas%20donde%20la%20categor%C3%ADa%20es%20%22A%22.%20En%20el%20bucle%20anidado%2C%20itero%20a%20trav%C3%A9s%20de%20las%20subcategor%C3%ADas%2C%20donde%20en%20la%20primera%20iteraci%C3%B3n%20obtengo%20una%20lista%20de%20todas%20las%20matrices%20asociativas%20con%20la%20subcategor%C3%ADa%20%22aa%22%2C%20y%20as%C3%AD%20sucesivamente.%3C%2FP%3E%3CP%3EUn%20buen%20ejemplo%20de%20lo%20que%20necesito%20lograr%20se%20puede%20mostrar%20en%20PowerShell%20de%20la%20siguiente%20manera%3A%3C%2FP%3E%3CPRE%3E%23%20Sample%20data%0A%24data%20%3D%20%40(%0A%20%20%20%20%5BPSCustomObject%5D%40%7B%20Name%20%3D%20%22Alice%22%3B%20%20Group%20%3D%20%22A%22%20%7D%0A%20%20%20%20%5BPSCustomObject%5D%40%7B%20Name%20%3D%20%22Bob%22%3B%20%20%20%20Group%20%3D%20%22B%22%20%7D%0A%20%20%20%20%5BPSCustomObject%5D%40%7B%20Name%20%3D%20%22Charlie%22%3B%20Group%20%3D%20%22A%22%20%7D%0A%20%20%20%20%5BPSCustomObject%5D%40%7B%20Name%20%3D%20%22David%22%3B%20%20Group%20%3D%20%22B%22%20%7D%0A)%0A%0A%23%20Group%20the%20data%20by%20the%20'Group'%20property%0A%24groupedData%20%3D%20%24data%20%7C%20Group-Object%20-Property%20Group%0A%0A%23%20Iterate%20over%20each%20group%0Aforeach%20(%24group%20in%20%24groupedData)%20%7B%0A%20%20%20%20Write-Host%20%22Group%3A%20%24(%24group.Name)%22%0A%0A%20%20%20%20%23%20Iterate%20over%20each%20item%20within%20the%20group%0A%20%20%20%20foreach%20(%24item%20in%20%24group.Group)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20%22%20%20Name%3A%20%24(%24item.Name)%22%0A%20%20%20%20%7D%0A%7D%3C%2FPRE%3E%3CP%3E%C2%BFC%C3%B3mo%20hago%20algo%20as%C3%AD%20en%20JSL%3F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-825328%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3EAutomatizaci%C3%B3n%20y%20scripting%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-825338%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20%C2%BFC%C3%B3mo%20iterar%20sobre%20una%20lista%20de%20matrices%20asociativas%20agrupadas%20por%20valores%20clave%20espec%C3%ADficos%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-825338%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EOk%2C%20aqu%C3%AD%20est%C3%A1%20c%C3%B3mo%20lo%20hice%20en%20JSL%3A%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3Eaalist%20%3D%20%7B%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22123%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22124%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22125%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22124%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22A%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22125%22%0A%09%5D%0A%09%2C%0A%09%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%09%0A%09%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%09%2C%0A%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%0A%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22127%22%0A%09%5D%0A%09%2C%09%0A%09%09%09%5B%0A%09%09%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%09%09%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%0A%09%09%22Value%22%20%3D%26gt%3B%20%22126%22%0A%09%5D%0A%7D%3B%0A%0A%2F%2F%20Function%20to%20group%20by%20a%20property%0AgroupBy%20%3D%20Function(%20%7Blist%2C%20property%7D%2C%0A%20%20%20%20%7BDefault%20local%7D%2C%0A%20%20%20%20groups%20%3D%20Associative%20Array()%3B%0A%20%20%20For%20Each(%7Bitem%2C%20index%7D%2C%20list%2C%0A%20%20%20%20%20%20%20%20key%20%3D%20item%5Bproperty%5D%3B%0A%20%20%20%20%20%20%20%20If(%20!Contains(%20groups%2C%20key%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20groups%5Bkey%5D%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20Insert%20Into(%20groups%5Bkey%5D%2C%20item%20)%3B%0A%20%20%20%20)%3B%0A%20%20%20%20groups%3B%0A)%3B%0A%0A%2F%2F%20Group%20the%20list%20by%20the%20%22Department%22%20property%0Agrouped%20%3D%20groupBy(aalist%2C%20%22Category%22)%3B%0A%0A%2F%2F%20Iterate%20over%20the%20groups%0AFor%20Each(%20%7B%7Bkey%2C%20value%7D%2C%20index%7D%2C%20grouped%2C%0A%20%20%20%20Write(%22%5C!nCategory%3A%20%22%20%7C%7C%20key)%3B%0A%20%20%20%20subgrouped%20%3D%20groupBy(value%2C%20%22Subcategory%22)%3B%0A%09For%20Each(%20%7B%7Bkey%2C%20value%7D%2C%20index%7D%2C%20subgrouped%2C%0A%09%09Write(%22%5C!n%20%20%20%20%20-%20Subcategory%3A%20%22%7C%7C%20key)%3B%0A%09%09For%20Each(%7Bitem%2C%20index%7D%2C%20value%2C%0A%09%09%09Write(%22%5C!n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20%22%7C%7Citem%5B%22Category%22%5D%7C%7C%22%2C%20Subcategory%3A%20%22%7C%7Citem%5B%22Subcategory%22%5D%7C%7C%22%2C%20Value%20%3D%20%22%7C%7CChar(item%5B%22Value%22%5D))%0A%09%09)%09%0A%09)%3B%0A%20%20%20%20%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EProducci%C3%B3n%3A%3C%2FP%3E%3CPRE%3ECategory%3A%20A%0A%20%20%20%20%20-%20Subcategory%3A%20aa%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20A%2C%20Subcategory%3A%20aa%2C%20Value%20%3D%20123%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20A%2C%20Subcategory%3A%20aa%2C%20Value%20%3D%20124%0A%20%20%20%20%20-%20Subcategory%3A%20bb%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20A%2C%20Subcategory%3A%20bb%2C%20Value%20%3D%20125%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20A%2C%20Subcategory%3A%20bb%2C%20Value%20%3D%20124%0A%20%20%20%20%20-%20Subcategory%3A%20cc%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20A%2C%20Subcategory%3A%20cc%2C%20Value%20%3D%20125%0ACategory%3A%20B%0A%20%20%20%20%20-%20Subcategory%3A%20aa%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20aa%2C%20Value%20%3D%20126%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20aa%2C%20Value%20%3D%20127%0A%20%20%20%20%20-%20Subcategory%3A%20bb%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20bb%2C%20Value%20%3D%20127%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20bb%2C%20Value%20%3D%20126%0A%20%20%20%20%20-%20Subcategory%3A%20cc%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20cc%2C%20Value%20%3D%20127%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20cc%2C%20Value%20%3D%20127%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20Category%3A%20B%2C%20Subcategory%3A%20cc%2C%20Value%20%3D%20126%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-825366%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20%C2%BFC%C3%B3mo%20iterar%20sobre%20una%20lista%20de%20matrices%20asociativas%20agrupadas%20por%20valores%20clave%20espec%C3%ADficos%3F%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-825366%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3ELa%20misma%20idea%3A%20reconstruye%20tu%20lista%20para%20que%20sea%20m%C3%A1s%20%C3%BAtil%20y%20luego%20haz%20lo%20que%20necesites%20con%20ella.%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3ENames%20Default%20To%20Here(1)%3B%0A%0Aaalist%20%3D%20%7B%5B%22Category%22%20%3D%26gt%3B%20%22A%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%20%22Value%22%20%3D%26gt%3B%20%22123%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22A%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%0A%22Value%22%20%3D%26gt%3B%20%22124%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22A%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%20%22Value%22%20%3D%26gt%3B%20%22125%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22A%22%2C%20%22Subcategory%22%0A%20%3D%26gt%3B%20%22bb%22%2C%20%22Value%22%20%3D%26gt%3B%20%22124%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22A%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%20%22Value%22%20%3D%26gt%3B%20%22125%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22B%22%2C%0A%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%20%22Value%22%20%3D%26gt%3B%20%22126%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22aa%22%2C%20%22Value%22%20%3D%26gt%3B%20%22127%22%5D%2C%20%5B%22Category%22%0A%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%20%22Value%22%20%3D%26gt%3B%20%22127%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22bb%22%2C%20%22Value%22%20%3D%26gt%3B%20%22126%22%5D%2C%20%5B%0A%22Category%22%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%20%22Value%22%20%3D%26gt%3B%20%22127%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%20%22Value%22%20%3D%26gt%3B%0A%22127%22%5D%2C%20%5B%22Category%22%20%3D%26gt%3B%20%22B%22%2C%20%22Subcategory%22%20%3D%26gt%3B%20%22cc%22%2C%20%22Value%22%20%3D%26gt%3B%20%22126%22%5D%7D%3B%0A%20%0Aaa%20%3D%20Associative%20Array()%3B%0A%0AFor%20Each(%7Baa_item%7D%2C%20aalist%2C%0A%09If(!Contains(aa%2C%20aa_item%5B%22Category%22%5D)%2C%0A%09%09aa%5Baa_item%5B%22Category%22%5D%5D%20%3D%20Associative%20Array()%3B%0A%09)%3B%0A%09If(!Contains(aa%5Baa_item%5B%22Category%22%5D%5D%2C%20aa_item%5B%22Subcategory%22%5D)%2C%0A%09%09aa%5Baa_item%5B%22Category%22%5D%5D%5Baa_item%5B%22Subcategory%22%5D%5D%20%3D%20%7B%7D%3B%0A%09)%3B%0A%09Insert%20Into(aa%5Baa_item%5B%22Category%22%5D%5D%5Baa_item%5B%22Subcategory%22%5D%5D%2C%20aa_item%5B%22Value%22%5D)%3B%0A)%3B%0A%0AFor%20Each(%7B%7Bcategory%2C%20subcategory%7D%7D%2C%20aa%2C%0A%09Write(%22%5C!NCategory%3A%20%22%2C%20category)%3B%0A%09For%20Each(%7B%7Bsubcategory_key%2C%20subcategory_values%7D%7D%2C%20subcategory%2C%0A%09%09Write(%22%5C!N%5C!t-%20Subcategory%3A%20%22%2C%20subcategory_key)%3B%0A%09%09For%20Each(%7Bvalue%7D%2C%20subcategory_values%2C%0A%09%09%09Write(%22%5C!N%5C!t%5C!t-%20Category%3A%20%22%2C%20category%2C%20%22%2C%20Subcategory%3A%20%22%2C%20subcategory_key%2C%20%22%2C%20Value%20%3D%20%22%2C%20value)%3B%0A%09%09)%3B%0A%09)%3B%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E
Choose Language Hide Translation Bar
miguello
Level VII

How to iterate over list of associative arrays grouped by a specific key values?

Let's say I have a list of associative arrays.

I want to iterate over this list by groups. First by category, then, in a nested loop, by subcategory.

aalist = {
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "123"
	]
	,
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "125"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "cc",
		"Value" => "125"
	]
	,
	
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "126"
	]
};

Meaning that in my first loop on the first iteration I get a list of associative arrays where Category is "A". In the nested loop I iterate through subcategories, where on first iteration I get a list of all associative arrays with Subcategory "aa", and so on.

A good example of what I need to accomplish can be shown in PowerShell as follows:

# Sample data
$data = @(
    [PSCustomObject]@{ Name = "Alice";  Group = "A" }
    [PSCustomObject]@{ Name = "Bob";    Group = "B" }
    [PSCustomObject]@{ Name = "Charlie"; Group = "A" }
    [PSCustomObject]@{ Name = "David";  Group = "B" }
)

# Group the data by the 'Group' property
$groupedData = $data | Group-Object -Property Group

# Iterate over each group
foreach ($group in $groupedData) {
    Write-Host "Group: $($group.Name)"

    # Iterate over each item within the group
    foreach ($item in $group.Group) {
        Write-Host "  Name: $($item.Name)"
    }
}

How do I do something like that in JSL?

1 ACCEPTED SOLUTION

Accepted Solutions
miguello
Level VII

Re: How to iterate over list of associative arrays grouped by a specific key values?

Ok, here is how I did it in JSL:

aalist = {
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "123"
	]
	,
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "125"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "cc",
		"Value" => "125"
	]
	,
	
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "126"
	]
};

// Function to group by a property
groupBy = Function( {list, property},
    {Default local},
    groups = Associative Array();
   For Each({item, index}, list,
        key = item[property];
        If( !Contains( groups, key ),
            groups[key] = {};
        );
        Insert Into( groups[key], item );
    );
    groups;
);

// Group the list by the "Department" property
grouped = groupBy(aalist, "Category");

// Iterate over the groups
For Each( {{key, value}, index}, grouped,
    Write("\!nCategory: " || key);
    subgrouped = groupBy(value, "Subcategory");
	For Each( {{key, value}, index}, subgrouped,
		Write("\!n     - Subcategory: "|| key);
		For Each({item, index}, value,
			Write("\!n               - Category: "||item["Category"]||", Subcategory: "||item["Subcategory"]||", Value = "||Char(item["Value"]))
		)	
	);
    
);

Output:

Category: A
     - Subcategory: aa
               - Category: A, Subcategory: aa, Value = 123
               - Category: A, Subcategory: aa, Value = 124
     - Subcategory: bb
               - Category: A, Subcategory: bb, Value = 125
               - Category: A, Subcategory: bb, Value = 124
     - Subcategory: cc
               - Category: A, Subcategory: cc, Value = 125
Category: B
     - Subcategory: aa
               - Category: B, Subcategory: aa, Value = 126
               - Category: B, Subcategory: aa, Value = 127
     - Subcategory: bb
               - Category: B, Subcategory: bb, Value = 127
               - Category: B, Subcategory: bb, Value = 126
     - Subcategory: cc
               - Category: B, Subcategory: cc, Value = 127
               - Category: B, Subcategory: cc, Value = 127
               - Category: B, Subcategory: cc, Value = 126

View solution in original post

2 REPLIES 2
miguello
Level VII

Re: How to iterate over list of associative arrays grouped by a specific key values?

Ok, here is how I did it in JSL:

aalist = {
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "123"
	]
	,
	[
		"Category" => "A",
		"Subcategory" => "aa",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "125"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "bb",
		"Value" => "124"
	]
	,
		[
		"Category" => "A",
		"Subcategory" => "cc",
		"Value" => "125"
	]
	,
	
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "aa",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "bb",
		"Value" => "126"
	]
	,
		[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,
	[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "127"
	]
	,	
			[
		"Category" => "B",
		"Subcategory" => "cc",
		"Value" => "126"
	]
};

// Function to group by a property
groupBy = Function( {list, property},
    {Default local},
    groups = Associative Array();
   For Each({item, index}, list,
        key = item[property];
        If( !Contains( groups, key ),
            groups[key] = {};
        );
        Insert Into( groups[key], item );
    );
    groups;
);

// Group the list by the "Department" property
grouped = groupBy(aalist, "Category");

// Iterate over the groups
For Each( {{key, value}, index}, grouped,
    Write("\!nCategory: " || key);
    subgrouped = groupBy(value, "Subcategory");
	For Each( {{key, value}, index}, subgrouped,
		Write("\!n     - Subcategory: "|| key);
		For Each({item, index}, value,
			Write("\!n               - Category: "||item["Category"]||", Subcategory: "||item["Subcategory"]||", Value = "||Char(item["Value"]))
		)	
	);
    
);

Output:

Category: A
     - Subcategory: aa
               - Category: A, Subcategory: aa, Value = 123
               - Category: A, Subcategory: aa, Value = 124
     - Subcategory: bb
               - Category: A, Subcategory: bb, Value = 125
               - Category: A, Subcategory: bb, Value = 124
     - Subcategory: cc
               - Category: A, Subcategory: cc, Value = 125
Category: B
     - Subcategory: aa
               - Category: B, Subcategory: aa, Value = 126
               - Category: B, Subcategory: aa, Value = 127
     - Subcategory: bb
               - Category: B, Subcategory: bb, Value = 127
               - Category: B, Subcategory: bb, Value = 126
     - Subcategory: cc
               - Category: B, Subcategory: cc, Value = 127
               - Category: B, Subcategory: cc, Value = 127
               - Category: B, Subcategory: cc, Value = 126
jthi
Super User

Re: How to iterate over list of associative arrays grouped by a specific key values?

Same idea, rebuild your list into something more usable and then do whatever you need with it

Names Default To Here(1);

aalist = {["Category" => "A", "Subcategory" => "aa", "Value" => "123"], ["Category" => "A", "Subcategory" => "aa",
"Value" => "124"], ["Category" => "A", "Subcategory" => "bb", "Value" => "125"], ["Category" => "A", "Subcategory"
 => "bb", "Value" => "124"], ["Category" => "A", "Subcategory" => "cc", "Value" => "125"], ["Category" => "B",
"Subcategory" => "aa", "Value" => "126"], ["Category" => "B", "Subcategory" => "aa", "Value" => "127"], ["Category"
 => "B", "Subcategory" => "bb", "Value" => "127"], ["Category" => "B", "Subcategory" => "bb", "Value" => "126"], [
"Category" => "B", "Subcategory" => "cc", "Value" => "127"], ["Category" => "B", "Subcategory" => "cc", "Value" =>
"127"], ["Category" => "B", "Subcategory" => "cc", "Value" => "126"]};
 
aa = Associative Array();

For Each({aa_item}, aalist,
	If(!Contains(aa, aa_item["Category"]),
		aa[aa_item["Category"]] = Associative Array();
	);
	If(!Contains(aa[aa_item["Category"]], aa_item["Subcategory"]),
		aa[aa_item["Category"]][aa_item["Subcategory"]] = {};
	);
	Insert Into(aa[aa_item["Category"]][aa_item["Subcategory"]], aa_item["Value"]);
);

For Each({{category, subcategory}}, aa,
	Write("\!NCategory: ", category);
	For Each({{subcategory_key, subcategory_values}}, subcategory,
		Write("\!N\!t- Subcategory: ", subcategory_key);
		For Each({value}, subcategory_values,
			Write("\!N\!t\!t- Category: ", category, ", Subcategory: ", subcategory_key, ", Value = ", value);
		);
	);
);
-Jarmo

Recommended Articles