2011-01-26 32 views
6

Tôi muốn viết chương trình C# thực hiện một số phương thức A(), B() và C() theo thứ tự ngẫu nhiên. Làm thế nào tôi có thể làm điều đó?Phương thức gọi theo thứ tự ngẫu nhiên (C#)

+2

Gjorgji, ý tưởng GUID là khủng khiếp. Xin vui lòng ít nhất là theo thứ tự ngẫu nhiên - hoặc tốt hơn, sử dụng thuật toán bình chọn nhiều nhất. Lấy gợi ý từ những lá phiếu đó - cộng đồng đang nói cho bạn cái nào tốt hơn. –

+0

một ý tưởng rất khủng khiếp, đó là lý do tại sao bạn sẽ không tìm thấy bất kỳ thứ gì trên google nếu bạn tìm kiếm nó http://www.google.com/search?q=orderby+%22Guid.NewGuid%22 –

+3

@Pauli, niềm tin của bạn là bất cứ điều gì bạn tìm thấy trên Google tự động là một ý tưởng tốt? –

Trả lời

14

Giả sử một máy phát điện số ngẫu nhiên tuyên bố như thế này:

public static Random Rnd = new Random(); 

Hãy định nghĩa một hàm Shuffle để mang lại một danh sách vào thứ tự ngẫu nhiên:

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

ngẫu nhiên này thực hiện kê biếu không của romkyns!

Bây giờ chỉ cần đặt các phương pháp trong một danh sách, phát ngẫu nhiên, sau đó chạy chúng:

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

Cách dễ nhất để xáo trộn trong LINQ là sử dụng * OrderBy (m => Guid.NewGuid()) * –

+4

+1 để phát ngẫu nhiên. – SLaks

+3

@Pauli: Sẽ dễ dàng hơn khi viết một chương trình đôi khi xuất ra rác thải hơn một chương trình hoạt động đáng tin cậy. – Timwi

Các vấn đề liên quan