<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to iterate over list of associative arrays grouped by a specific key values? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825366#M100544</link>
    <description>&lt;P&gt;Same idea, rebuild your list into something more usable and then do whatever you need with it&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

aalist = {["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "123"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "aa",
"Value" =&amp;gt; "124"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "125"], ["Category" =&amp;gt; "A", "Subcategory"
 =&amp;gt; "bb", "Value" =&amp;gt; "124"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "125"], ["Category" =&amp;gt; "B",
"Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "126"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "127"], ["Category"
 =&amp;gt; "B", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "126"], [
"Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt;
"127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "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);
		);
	);
);&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 28 Dec 2024 06:55:43 GMT</pubDate>
    <dc:creator>jthi</dc:creator>
    <dc:date>2024-12-28T06:55:43Z</dc:date>
    <item>
      <title>How to iterate over list of associative arrays grouped by a specific key values?</title>
      <link>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825328#M100538</link>
      <description>&lt;P&gt;Let's say I have a list of associative arrays.&lt;/P&gt;&lt;P&gt;I want to iterate over this list by groups. First by category, then, in a nested loop, by subcategory.&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;aalist = {
	[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "123"
	]
	,
	[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "124"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "125"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "124"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "125"
	]
	,
	
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "126"
	]
	,
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "127"
	]
	,
	[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "127"
	]
	,	
			[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "126"
	]
	,
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "127"
	]
	,
	[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "127"
	]
	,	
			[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "126"
	]
};&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;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.&lt;/P&gt;&lt;P&gt;A good example of what I need to accomplish can be shown in PowerShell as follows:&lt;/P&gt;&lt;PRE&gt;# 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)"
    }
}&lt;/PRE&gt;&lt;P&gt;How do I do something like that in JSL?&lt;/P&gt;</description>
      <pubDate>Fri, 27 Dec 2024 18:59:56 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825328#M100538</guid>
      <dc:creator>miguello</dc:creator>
      <dc:date>2024-12-27T18:59:56Z</dc:date>
    </item>
    <item>
      <title>Re: How to iterate over list of associative arrays grouped by a specific key values?</title>
      <link>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825338#M100539</link>
      <description>&lt;P&gt;Ok, here is how I did it in JSL:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;aalist = {
	[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "123"
	]
	,
	[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "124"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "125"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "124"
	]
	,
		[
		"Category" =&amp;gt; "A",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "125"
	]
	,
	
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "126"
	]
	,
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "aa",
		"Value" =&amp;gt; "127"
	]
	,
	[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "127"
	]
	,	
			[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "bb",
		"Value" =&amp;gt; "126"
	]
	,
		[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "127"
	]
	,
	[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "127"
	]
	,	
			[
		"Category" =&amp;gt; "B",
		"Subcategory" =&amp;gt; "cc",
		"Value" =&amp;gt; "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"]))
		)	
	);
    
);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Output:&lt;/P&gt;&lt;PRE&gt;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&lt;/PRE&gt;</description>
      <pubDate>Fri, 27 Dec 2024 22:04:22 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825338#M100539</guid>
      <dc:creator>miguello</dc:creator>
      <dc:date>2024-12-27T22:04:22Z</dc:date>
    </item>
    <item>
      <title>Re: How to iterate over list of associative arrays grouped by a specific key values?</title>
      <link>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825366#M100544</link>
      <description>&lt;P&gt;Same idea, rebuild your list into something more usable and then do whatever you need with it&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

aalist = {["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "123"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "aa",
"Value" =&amp;gt; "124"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "125"], ["Category" =&amp;gt; "A", "Subcategory"
 =&amp;gt; "bb", "Value" =&amp;gt; "124"], ["Category" =&amp;gt; "A", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "125"], ["Category" =&amp;gt; "B",
"Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "126"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "aa", "Value" =&amp;gt; "127"], ["Category"
 =&amp;gt; "B", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "bb", "Value" =&amp;gt; "126"], [
"Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt;
"127"], ["Category" =&amp;gt; "B", "Subcategory" =&amp;gt; "cc", "Value" =&amp;gt; "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);
		);
	);
);&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 28 Dec 2024 06:55:43 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-to-iterate-over-list-of-associative-arrays-grouped-by-a/m-p/825366#M100544</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-12-28T06:55:43Z</dc:date>
    </item>
  </channel>
</rss>

