The following code presents two approaches that generate pairs of integers whose sum is less than 100, and they are arranged in descending order based on their distance from (0,0).
//approach 1 private static IEnumerable<Tuple<int,int>> ProduceIndices3() { var storage = new List<Tuple<int, int>>(); for (int x = 0; x < 100; x++) { for (int y = 0; y < 100; y++) { if (x + y < 100) storage.Add(Tuple.Create(x, y)); } } storage.Sort((p1,p2) => (p2.Item1 * p2.Item1 + p2.Item2 * p2.Item2).CompareTo( p1.Item1 * p1.Item1 + p1.Item2 * p1.Item2)); return storage; } //approach 2 private static IEnumerable<Tuple<int, int>> QueryIndices3() { return from x in Enumerable.Range(0, 100) from y in Enumerable.Range(0, 100) where x + y < 100 orderby (x * x + y * y) descending select Tuple.Create(x, y); }
This code is taken from Bill Wagner's Effective C # book, paragraph 8. Throughout the article, the author paid more attention to the syntax, compactness and readability of the code, but paid very little attention to the presentation and hardly discussed it.
So, I basically want to know which approach is faster? And what is usually better at execution (in general): Query syntax or Manual loops?
Please discuss them in detail by providing links, if any. :-)
Nawaz source share