.Net Tips — Use LINQ to avoid nested loops

Yan Cui
theburningmonk.com
Published in
1 min readJun 7, 2011

Admit it, we’ve all done it before, writing those nasty nested loops just so we can iterate through multiple lists to get some combination/permutation of the lists, e.g.:

1: for (int i = 0; i < 10; i++)2: {3:     for (int j = 0; j < 10; j++)4:     {5:         for (int k = 0; k < 10; k++)6:         {7:             // do something8:         }9:     }10: }

This code obviously works and well understood amongst developers, but it’s not very readable and trying to terminate the outer loops from the inner loops is a pain and requires you to use one or more boolean flags which you need to track on every iteration at potentially every level of your loop…

A better way to solve this common problem is to use LINQ to ‘flatten’ the nested loops into a single loop:

1: var triplets = from I in Enumerable.Range(0, 10)2:                from J in Enumerable.Range(0, 10)3:                from K in Enumerable.Range(0, 10)4:                select new { I, J, K };5:6: foreach (var triplet in triplets)7: {8:     // do something9: }

Sweet, right? :-)

--

--

Yan Cui
theburningmonk.com

AWS Serverless Hero. Follow me to learn practical tips and best practices for AWS and Serverless.