Archive

Archive for the ‘Linq’ Category

Extension method fun 2

January 2, 2011 1 comment

Sometimes it is required to shuffle the elements of a collection. I have seen little algorithm monsters that did this, yet it can be done in c# and .Net in a very clean way using a Linq query. The key to understand my Linq query, is knowing that the orderby expression does not necessarily has to order the elements of your query.

public static class EnumerableExtensions
{
    public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> enumerable)
    {
         return from i in enumerable
                orderby Guid.NewGuid()
                select i;
     }
}

A small test application:

static void Main(string[] args)
{
    List<string> inputData = new List<string>() { "pieter", "bill", "steve" };
    IEnumerable<string> shuffledData = inputData.Shuffle();

    foreach (string item in shuffledData)
        Console.WriteLine(item);
}
Categories: C#, Linq