weicongjin 于 2016-05-25 17:31:26 编辑
例如现在有A、B、C、D是个方法,需要打乱顺序执行,4个都要执行,随机顺序,每个执行一次。
排列组合的意思:
1、C > A > B > D
2、D > B > C > A
3、A > D > C > B
…
问一下在.NET 2.0中怎么样实现呢?
/// <summary> /// 随机乱序执行A、B、C、D /// </summary> public void RandomRun() { A(); B(); C(); D(); } public void A() { } public void B() { } public void C() { } public void D() { }
解决方案
5
大致如下:
1. 放在List里面,
List<int, string> (Key, Value)
1 , “A”
2 , “B”
3 , “C”
4 , “D”
2. 娶个随机数 x, (x mod list.length) + 1
3.根据2的结果找到value, 然后删除这个list item
4. switch case 3的结果
1. 放在List里面,
List<int, string> (Key, Value)
1 , “A”
2 , “B”
3 , “C”
4 , “D”
2. 娶个随机数 x, (x mod list.length) + 1
3.根据2的结果找到value, 然后删除这个list item
4. switch case 3的结果
35
当然假如你只是想随机地“仅调用一遍”,就可以从列表中删除待执行的委托。
using System; using System.Collections.Generic; namespace ConsoleApplication2 { class Program { delegate void Action(); static void Main(string[] args) { List<Action> methods = new List<Action> { A, B, C, D }; while(methods.Count>0) { var j = rnd.Next(methods.Count); var m = methods[j]; methods.RemoveAt(j); m(); } Console.WriteLine("...............按任意键结束"); Console.ReadKey(); } private static Random rnd = new Random(); static void A() { Console.Write("A"); } static void B() { Console.Write("B"); } static void C() { Console.Write("C"); } static void D() { Console.Write("D"); } } }