2011-01-26 21 views
6

A(), B() ve C() yöntemlerini rasgele sırada yürüten bir C# programı yazmak istiyorum. Bunu nasıl yapabilirim?Yöntemler rasgele sırada çağırılıyor (C#)

+2

Corci, GUID fikri korkunç. Lütfen en azından Rastgele sipariş verin - ya da daha iyisi, en çok kullanılan algoritmayı kullanın. Bu oylardan ipucu alın - toplum size hangisinin daha iyi olduğunu anlatıyor. –

+0

çok korkunç bir fikir, bu yüzden eğer http://www.google.com/search?q=orderby+%22Guid.NewGuid%22 –

+3

@ Pauli 'ye bakarsanız google'da hiçbir şey bulamadınız. Google’da bulduğunuz her şey otomatik olarak iyi bir fikirdir? –

cevap

14

bu gibi bildirilen bir rastgele sayı üreteci varsayarsak:

public static Random Rnd = new Random(); 

en rasgele içine listesini getirmek için bir Shuffle fonksiyonunu tanımlayalım: romkyns ait

/// <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; 
} 

Bu Karışık uygulama nezaket!

Şimdi sadece bir listede yöntemleri koymak, shuffle, sonra bunları çalıştırın:

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

Linq'de karıştırmanın en kolay yolu, gerçek shuffle için * OrderBy (m => Guid.NewGuid()) * –

+4

+1'i kullanmaktır. – SLaks

+3

@Pauli: Bazen güvenilir bir şekilde çalışan bir çöpü çıkaran bir program yazmak her zaman daha kolaydır. – Timwi

İlgili konular