如何获得应该是唯一的随机数列表
本文关键字:随机数 列表 唯一 何获得 | 更新日期: 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();