gpt4 book ai didi

c# - 我怎样才能改进这个 C# 随机化方法?

转载 作者:太空狗 更新时间:2023-10-29 23:53:54 26 4
gpt4 key购买 nike

我认为我已经将其确定为随机化列表的最简单且可单元测试的方法,但有兴趣了解任何改进。

public static IList<T> RandomiseList<T>(IList<T> list, int seed)
{
Random random = new Random(seed);
List<T> takeFrom = new List<T>(list);
List<T> ret = new List<T>(takeFrom.Count);

while (takeFrom.Count > 0)
{
int pos = random.Next(0, takeFrom.Count - 1);
T item = takeFrom[pos];
takeFrom.RemoveAt(pos);
ret.Add(item);
}

return ret;
}

最佳答案

你想要洗牌,最好的方法是 Fisher-Yates随机播放:

public static IList<T> Randomise<T>(IList<T> list, int seed) 
{
Random rng = new Random(seed);

List<T> ret = new List<T>(list);
int n = ret.Length;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
// Simple swap of variables
T tmp = list[k];
ret[k] = ret[n];
ret[n] = tmp;
}
return ret;
}

关于c# - 我怎样才能改进这个 C# 随机化方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com