2011-01-26 11 views
6

Quiero escribir un programa C# que ejecuta varios métodos A(), B() y C() en orden aleatorio. ¿Cómo puedo hacer eso?Métodos de llamada en orden aleatorio (C#)

+2

Gjorgji, la idea GUID es terrible. Por favor al menos ordene por Aleatorio - o mejor aún, use el algoritmo más votado. Tome la pista de esos votos: la comunidad le dice cuál es mejor. –

+0

una idea muy terrible, por lo que no encontrará nada en google si lo busca http://www.google.com/search?q=orderby+%22Guid.NewGuid%22 –

+3

@Pauli, su creencia es cualquier cosa que encuentres en Google es automáticamente una buena idea? –

Respuesta

14

Suponiendo un generador de números aleatorios declarada como esto:

public static Random Rnd = new Random(); 

Vamos a definir una función Shuffle traer una lista en orden aleatorio:

/// <summary> 
/// Brings the elements of the given list into a random order 
/// </summary> 
/// <typeparam name="T">Type of elements in the list.</typeparam> 
/// <param name="list">List to shuffle.</param> 
/// <returns>The list operated on.</returns> 
public static IList<T> Shuffle<T>(this IList<T> list) 
{ 
    if (list == null) 
     throw new ArgumentNullException("list"); 
    for (int j = list.Count; j >= 1; j--) 
    { 
     int item = Rnd.Next(0, j); 
     if (item < j - 1) 
     { 
      var t = list[item]; 
      list[item] = list[j - 1]; 
      list[j - 1] = t; 
     } 
    } 
    return list; 
} 

Este aleatoria aplicación cortesía de romkyns!

Ahora basta con poner los métodos en una lista, reproducción aleatoria, a continuación, ejecutar ellos:

var list = new List<Action> { A, B, C }; 
list.Shuffle(); 
list.ForEach(method => method()); 
+0

La forma más fácil de mezclar en Linq es usar * OrderBy (m => Guid.NewGuid()) * –

+4

+1 para mezclar en tiempo real. – SLaks

+3

@Pauli: Siempre es más fácil escribir un programa que a veces genera basura que uno que funciona de manera confiable. – Timwi

Cuestiones relacionadas