I have checked distinct performance over nested loop with any. But Distinct Method is much faster then nested loop.
var customers = new List<Customer>();
for (var i = 1; i <= 100000; i++)
{
var id = (int)Math.Floor((decimal)i / 10);
var customer = new Customer()
{
FirstName = $"Name {i}",
ID = id,
LastName = $"Last {i}"
};
customers.Add(customer);
}
System.Console.WriteLine($"Outer Loop start :{DateTime.UtcNow}");
var ids = new List<int>();
customers.ForEach(_=> {
ids.Add(_.ID);
});
var uniqueIds = ids.Distinct();
System.Console.WriteLine($"Outer Loop End :{DateTime.UtcNow}");
System.Console.WriteLine($"Nested Loop start :{DateTime.UtcNow}");
var oids = new List<int>();
customers.ForEach(_ => {
if (!oids.Any(i => i == _.ID))
{
oids.Add(_.ID);
}
});
System.Console.WriteLine($"Nested Loop End :{DateTime.UtcNow}");
Result: Outer Loop start :6/20/2020 4:15:31 PM Outer Loop End :6/20/2020 4:15:31 PM Nested Loop start :6/20/2020 4:15:32 PM Nested Loop End :6/20/2020 4:15:46 PM
It just took 1 second for Outerloop but 14 seconds for nested loop. How Distinct is much faster than using "Any" Function in foreach ?