var list = new List([
{ "col1": "1", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "A", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "B", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "C", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "1", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "A", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "B", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "C", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "2", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "A", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "B", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "B", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "C", "col3": "cat", "col4": "dog", "col5": "blue"},
{ "col1": "3", "col2": "C", "col3": "bird", "col4": "dog", "col5": "blue"},
{ "col1": "4", "col2": "A", "col3": "cat", "col4": "dog", "col5": "blue"}
]);
let groupedData = list.groupBy(x => x['col1'])
.map(row => row.groupBy(x => x['col2'])
.map(row => row.groupBy(x => x['col3']))
);
Это создаст три уровня группировки по col1, col2, а затем col3.
Как бы я сделал это рекурсивно с любыми n номерами столбцов для группировки и любыми столбцами в любом порядке ([coln, col4, coln-1], например)?