25 de set. de 2009

Lista Embaralhada – O Retorno

Pessoal, em um post anterior sobre lista embaralhada (http://spokydev.blogspot.com/2009/09/embaralhando-uma-lista.html), o Caio Proiete (http://www.caioproiete.com) colocou uns codigos interessantes para embaralhar uma lista usando o LINQ. Vejamos então como ficará noso código.

A primeira opção é manter o Random, usando o OrderBy do LINQ com Lambda Expressions, algo assim:

public static IList<T> Shuffle<T>(this IList<T> list)
{
    // -> Gerador de numeros ramdomicos.
    var r = new Random();

    // -> Retorna a lista embaralhada, ordenando atraves do numero randomico
    //     e usando lambda.
    return list.OrderBy(n => r.Next(list.Count)).ToList();
}

Mas este código pode ser mais exuto ainda, usando GUID (Globally Unique Identifier), vejamos:

public static IList<T> Shuffle<T>(this IList<T> list)
{
    // -> Retorna a lista embaralhada baseada em uma GUID.
    return list.OrderBy(n => Guid.NewGuid()).ToList();
}

Como a GUID é um identificador randomico, o OrderBy ordenará radomicamente também. Particularmente este ultimo metodo me agradou mais, por ser simples, curto e claro. A GUID também tem a tendencia natural a não se repetir!

Veja como ficaria o uso:

image

… A implementação:

image

Obrigado :)

Mais sobre GUID:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

http://www.macoratti.net/d130402.htm

0 comentários: