Come scorrere un elenco di array associativi raggruppati in base a valori chiave specifici?Supponiamo di avere un elenco di array associativi.
Voglio scorrere questa lista per gruppi. Prima per categoria, poi, in un ciclo nidificato, per sottocategoria.
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"
]
};Ciò significa che nel mio primo ciclo alla prima iterazione ottengo un elenco di array associativi in cui la categoria è "A". Nel ciclo annidato eseguo un'iterazione attraverso le sottocategorie, dove alla prima iterazione ottengo un elenco di tutti gli array associativi con la sottocategoria "aa" e così via.
Un buon esempio di ciò che devo realizzare può essere mostrato in PowerShell come segue:
# 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)"
}
}Come posso fare una cosa del genere in JSL?
Automazione e scriptingR: Come scorrere un elenco di array associativi raggruppati in base a valori chiave specifici?Ok, ecco come l'ho fatto 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"]))
)
);
);Produzione:
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 = 126R: Come scorrere un elenco di array associativi raggruppati in base a valori chiave specifici?Stessa idea, ricostruisci la tua lista in qualcosa di più utilizzabile e poi fanne ciò di cui hai bisogno
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);
);
);
);