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

本文关键字:随机数 列表 唯一 何获得 | 更新日期: 2023-09-27 18:29:48

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

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

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

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

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

您需要的是所谓的洗牌。我联系的费舍尔-耶茨洗牌让你在线性时间内做到这一点,这是你能得到的最好的。

要在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();