在C#中,我想要列出5个随机数,它应包含1到5的唯一值?我怎样才能做到这一点?
例如:1,3,2,5,4或2,5,1,3,4
即。该列表必须包含5个随机数,这些数字的数字应为1到5
答案 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();