-3

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

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

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

4

2 回答 2

4
Random rnd = new Random();
var list = Enumerable.Range(1, 5).OrderBy(x => rnd.Next()).ToList();
于 2013-09-02T07:48:58.057 回答
3

您需要的称为shuffle。我链接的 Fisher-Yates 洗牌让你在线性时间内做到这一点,这大约是你能得到的最好的。

要在 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();
于 2013-09-02T07:48:07.990 回答