Csharp/C#教程:随机列表分享


随机列表

可能重复:
随机化C#中的List

我有一个列表,其中包含数千个FilePath到音频文件的位置,并想知道哪个是“洗牌”列表的最有效方法?

任何帮助是极大的赞赏 :)

谢谢

Fisher-Yates Shuffle或者也被称为Knuth shuffle。

这是Fischer-Yates / Knuth shuffle的简单(但有效)实现:

Random rnd = new Random(); for (int i = files.Length; i > 1; i--) { int pos = rnd.Next(i); var x = files[i - 1]; files[i - 1] = files[pos]; files[pos] = x; } 

或略有变化:

 Random rnd = new Random(); for (int i = 1; i < files.Length; i++) { int pos = rnd.Next(i + 1); var x = files[i]; files[i] = files[pos]; files[pos] = x; } 

由于这是一个O(n)操作,它是改组列表的最有效方法。 由于列表中的所有项目都必须有机会被移动,因此不可能比O(n)更有效地混洗列表。

我通过使用这种方法和当前接受的答案(LINQ OrderBy)将每个项目拖动了一千次,进行了一次小的性能测试,这大约快了15倍(!)。

myList.OrderBy(Guid.NewGuid())

我将Jon Skeet的这个问题的解决方案添加到了我的扩展库中。 我实现了一些方法,它们都使用外部随机数生成器并使用默认实现(随机)创建一个。

上述就是C#学习教程:随机列表分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1010974.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐