using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static IEnumerable<T?>[] Aligned<T>(params List<T>[] lists)
where T : struct
{
var all = new HashSet<T>();
foreach (var list in lists)
all.UnionWith(list);
return lists.Select(list => all.Select(val =>
list.BinarySearch(val) >= 0? val : default(T?)
)).ToArray();
}
public static void Main()
{
var list1 = new List<int>() { 1, 2, 3, 4 };
var list2 = new List<int>() { 2, 3, 5, 6, 7, 8 };
var list3 = new List<int>() { 3, 4, 5 };
var aligned = Aligned(list1, list2, list3);
Console.WriteLine("new list1[5]: {0}", aligned[0].ElementAt(5));
Console.WriteLine("new list2[8]: {0}", aligned[1].ElementAt(7));
var newlist3 = aligned[2].ToList();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPFQ/PltdIEFsaWduZWQ8VD4ocGFyYW1zIExpc3Q8VD5bXSBsaXN0cykKICAgICAgICB3aGVyZSBUIDogc3RydWN0CiAgICB7CiAgICAgICAgdmFyIGFsbCA9IG5ldyBIYXNoU2V0PFQ+KCk7CiAgICAgICAgZm9yZWFjaCAodmFyIGxpc3QgaW4gbGlzdHMpCiAgICAgICAgICAgIGFsbC5VbmlvbldpdGgobGlzdCk7CgogICAgICAgIHJldHVybiBsaXN0cy5TZWxlY3QobGlzdCA9PiBhbGwuU2VsZWN0KHZhbCA9PiAKICAgICAgICAgICAgICAgIGxpc3QuQmluYXJ5U2VhcmNoKHZhbCkgPj0gMD8gdmFsIDogZGVmYXVsdChUPykKICAgICAgICAgICAgKSkuVG9BcnJheSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICB2YXIgbGlzdDEgPSBuZXcgTGlzdDxpbnQ+KCkgeyAxLCAyLCAzLCA0IH07CiAgICAgICAgdmFyIGxpc3QyID0gbmV3IExpc3Q8aW50PigpIHsgMiwgMywgNSwgNiwgNywgOCB9OwogICAgICAgIHZhciBsaXN0MyA9IG5ldyBMaXN0PGludD4oKSB7IDMsIDQsIDUgfTsKCiAgICAgICAgdmFyIGFsaWduZWQgPSBBbGlnbmVkKGxpc3QxLCBsaXN0MiwgbGlzdDMpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgibmV3IGxpc3QxWzVdOiB7MH0iLCBhbGlnbmVkWzBdLkVsZW1lbnRBdCg1KSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIm5ldyBsaXN0Mls4XTogezB9IiwgYWxpZ25lZFsxXS5FbGVtZW50QXQoNykpOwoKICAgICAgICB2YXIgbmV3bGlzdDMgPSBhbGlnbmVkWzJdLlRvTGlzdCgpOwogICAgfQp9Cg==