I have this code which just simply sorts IEnumerable of integers based on digit number in each of the integer.
var ints = new List<int>() { 66, 7, 9, -5, -22, 67, 122, -333, 555, -2 };
var ordered = ints.OrderBy(x =>
{
x = Math.Abs(x);
Console.WriteLine($"Getting length of {x}");
int len = 0;
while (x >= 1)
{
len++;
x /= 10;
}
return len;
});
Console.WriteLine("After OrderBy");
Console.WriteLine("Fetching first item in ordered sequence");
Console.WriteLine($"First item is {ordered.First()}");
Console.WriteLine(string.Join(" ", ordered));
So, when the program hits line with fetching first item in ordered
sequence in that moment the IEnumerable is getting sorted(I'm receiving output lines Getting lenght of XXX
) because OrderBy was deferred and that't quite clear.
But why when program hits Console.WriteLine(string.Join(" ", ordered));
I'm again getting this output? Is IEnumerable sorted again? (isn't it already sorted?)