Once you've grouped by the second & third items you'll have an IEnumerable<>
of your items per group, so you can just .ToHashSet()
them:
var A1 = ("A", "EUR/USD", "EURO");
var A2 = ("A", "CHF/USD", "CHF");
var A3 = ("A", "EUR/GBP", "EURO");
var A4 = ("B", "EUR/USD", "EURO");
var A5 = ("B", "CHF/USD", "CHF");
var A6 = ("B", "EUR/GBP", "EURO");
var A7 = ("C", "EUR/USD", "EURO");
var A8 = ("C", "CHF/USD", "CHF");
List<(string, string, string)> forex_pairs = new()
{
A1, A2, A3, A4, A5, A6, A7, A8
};
var groups = new List<Group>();
foreach (var group in forex_pairs.GroupBy(p => new { Code = p.Item2, Name = p.Item3 })) {
groups.Add(new Group(
group.Key.Code,
group.Key.Name,
group.Select(g => g.Item1).ToHashSet()
));
}
foreach (var group in groups) {
Console.WriteLine($"{group.Code}+{group.Name}: {string.Join(", ", group.GroupIds)}");
}
record Group(string Code, string Name, HashSet<string> GroupIds);