fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. public static IEnumerable<T?>[] Aligned<T>(params List<T>[] lists)
  8. where T : struct
  9. {
  10. var all = new HashSet<T>();
  11. foreach (var list in lists)
  12. all.UnionWith(list);
  13.  
  14. return lists.Select(list => all.Select(val =>
  15. list.BinarySearch(val) >= 0? val : default(T?)
  16. )).ToArray();
  17. }
  18.  
  19. public static void Main()
  20. {
  21. var list1 = new List<int>() { 1, 2, 3, 4 };
  22. var list2 = new List<int>() { 2, 3, 5, 6, 7, 8 };
  23. var list3 = new List<int>() { 3, 4, 5 };
  24.  
  25. var aligned = Aligned(list1, list2, list3);
  26.  
  27. foreach (var list in aligned)
  28. Console.WriteLine(string.Join("\t", list.Select(i => !i.HasValue ? "NULL" : i.Value.ToString()).ToArray()));
  29. }
  30. }
  31.  
Success #stdin #stdout 0.05s 37216KB
stdin
Standard input is empty
stdout
1	2	3	4	NULL	NULL	NULL	NULL
NULL	2	3	NULL	5	6	7	8
NULL	NULL	3	4	5	NULL	NULL	NULL