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");
}
}
}