如何迭代按特定鍵值分組的關聯數組列表?假設我有一個關聯數組的列表。
我想按組迭代此列表。首先按類別,然後在巢狀循環中按子類別。
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"
]
};這意味著在第一次迭代的第一個循環中,我得到了一個關聯數組列表,其中類別為「A」。在嵌套循環中,我迭代子類別,在第一次迭代中,我獲得了帶有子類別“aa”的所有關聯數組的列表,依此類推。
我需要完成的任務的一個很好的範例可以在 PowerShell 中顯示,如下所示:
# 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)"
}
}我如何在 JSL 中做類似的事情?
自動化和腳本編寫回覆:如何迭代按特定鍵值分組的關聯數組列表?好的,我在 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"]))
)
);
);輸出:
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回覆:如何迭代按特定鍵值分組的關聯數組列表?同樣的想法,將您的清單重建為更可用的東西,然後用它做任何您需要的事情
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);
);
);
);