using System.Collections.Generic;
using System.Collections;
public static void Main()
var listA = new List<string>{"A", "B", "C", "D", "G"};
var listB = new List<string>{"C", "C", "A", "E", "A", "F", "Q", "Q"};
var matching = listA.Intersect(listB).ToList();
Console.WriteLine(matching.Str());
var query = listA.GroupJoin(listB, a => a, b => b, (a, abList) => abList.ToList());
Console.WriteLine(query.Str());
var innerDist = listA.Union(listB);
Console.WriteLine(innerDist.Str());
var flippedDupMatch = listB.Union(listA).Except(listB.Intersect(listA));
Console.WriteLine(flippedDupMatch.Str());
public static string Str(this IEnumerable<string> str)
return str.Count() + " " + string.Join(",", str);
public static string Str(this List<string> str)
return str.Count() + " " + string.Join(",", str);
public static string Str(this IEnumerable<List<string>> str)
return str.SelectMany(x => x).ToList().Str();