如何获取应该是唯一的随机数列表

时间:2013-09-02 07:47:10

标签: c# random unique

在C#中,我想要列出5个随机数,它应包含1到5的唯一值?我怎样才能做到这一点?

例如:1,3,2,5,4或2,5,1,3,4

即。该列表必须包含5个随机数,这些数字的数字应为1到5

2 个答案:

答案 0 :(得分:4)

Random rnd = new Random();
var list = Enumerable.Range(1, 5).OrderBy(x => rnd.Next()).ToList();

答案 1 :(得分:3)

您需要的是shuffling。 Fisher-Yates shuffle我链接让你在线性时间做到这一点,这是你能得到的最好的。

要在C#中执行此操作,您甚至可以实现一个扩展方法,如下所示:

    public static Random rand = new Random();
    public static List<T> Shuffle<T>(this List<T> original)
    {
        List<T> lst = new List<T>(original);
        for (int i = lst.Count - 1; i >= 0; i--)
        {
            int j = rand.Next(0, i + 1);
            T tmp = lst[j];
            lst[j] = lst[i];
            lst[i] = tmp;
        }
        return lst;
    }

然后用:

调用它
var shuffled = lst.Shuffle();