如何迭代按特定键值分组的关联数组列表?假设我有一个关联数组列表。
我想按组迭代此列表。首先按类别迭代,然后按嵌套循环中的子类别迭代。
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);
);
);
);