using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
public class Test
{
public static void Main()
{
Random r = new Random(DateTime.Now.Millisecond);
Dictionary<Char, Int32> seed = Enumerable.Range(65, 26).ToDictionary(x => (Char)x, x => r.Next(10) % 5 != 0 ? r.Next(65536) : 1);
List<Char> sample = new List<Char>();
foreach (KeyValuePair<Char, Int32> kvp in seed)
{
for (Int32 i = 0; i < kvp.Value; i++)
{
sample.Add(kvp.Key);
}
}
Stopwatch sw = new Stopwatch();
sw.Start();
var result = sample.GroupBy (x => x).Where(x => x.Count() == 1).Select (x => x.Key);
sw.Stop();
Console.WriteLine(String.Format("{0} to go through {1} records.", sw.Elapsed, sample.Count));
Console.WriteLine(String.Format("Result: {0}", String.Join(", ", result.Select(x => x.ToString()).ToArray())));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5MaW5xOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgIFJhbmRvbSByID0gbmV3IFJhbmRvbShEYXRlVGltZS5Ob3cuTWlsbGlzZWNvbmQpOwogICAgICAgIERpY3Rpb25hcnk8Q2hhciwgSW50MzI+IHNlZWQgPSBFbnVtZXJhYmxlLlJhbmdlKDY1LCAyNikuVG9EaWN0aW9uYXJ5KHggPT4gKENoYXIpeCwgeCA9PiByLk5leHQoMTApICUgNSAhPSAwID8gci5OZXh0KDY1NTM2KSA6IDEpOwogICAgICAgIExpc3Q8Q2hhcj4gc2FtcGxlID0gbmV3IExpc3Q8Q2hhcj4oKTsKICAgICAgICBmb3JlYWNoIChLZXlWYWx1ZVBhaXI8Q2hhciwgSW50MzI+IGt2cCBpbiBzZWVkKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChJbnQzMiBpID0gMDsgaSA8IGt2cC5WYWx1ZTsgaSsrKSAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2FtcGxlLkFkZChrdnAuS2V5KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIAogICAgICAgIFN0b3B3YXRjaCBzdyA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICBzdy5TdGFydCgpOwogICAgICAgIHZhciByZXN1bHQgPSBzYW1wbGUuR3JvdXBCeSAoeCA9PiB4KS5XaGVyZSh4ID0+IHguQ291bnQoKSA9PSAxKS5TZWxlY3QgKHggPT4geC5LZXkpOwogICAgICAgIHN3LlN0b3AoKTsKICAgIAogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKFN0cmluZy5Gb3JtYXQoInswfSB0byBnbyB0aHJvdWdoIHsxfSByZWNvcmRzLiIsIHN3LkVsYXBzZWQsIHNhbXBsZS5Db3VudCkpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKFN0cmluZy5Gb3JtYXQoIlJlc3VsdDogezB9IiwgU3RyaW5nLkpvaW4oIiwgIiwgcmVzdWx0LlNlbGVjdCh4ID0+IHguVG9TdHJpbmcoKSkuVG9BcnJheSgpKSkpOwoJfQp9
00:00:00.0014143 to go through 503836 records.
Result: A, B, H, K, M, P, T, U, V, W, Y