1
A
回答
5
一种选择是使用Random
:
Random rng = new Random();
然后:
var randomOrderFiles = files.OrderBy(f => rng.Next());
这不是最有效的方法,因为它需要O(nlogn)。如果这对你来说是一个问题,那么存在更好的算法。
2
如果你不能使用Linq下面的方法应该工作:
static Random rand = new Random();
static void Randomize<T>(IList<T> list)
{
for (int i = list.Count - 1; i > 0; i--)
{
int i2 = rand.Next(i + 1);
if (i2 != i)
{
T tmp = list[i2];
list[i2] = list[i];
list[i] = tmp;
}
}
}
+0
又名[费 - 耶茨洗牌](http://en.wikipedia.org/wiki/Fisher% E2%80%93Yates_shuffle) - 这可以在原地完成(和你一样),哈O(n)的复杂性。 – Kobi 2010-05-25 09:37:22
0
- 遍历源列表。
- 从源列表中一个结果列表,直到源列表中删除随机源项
- 追加删除项目
- 重复是空
List<string> files = Directory.GetFiles("folder");
List<string> result = new List<string>();
while (files.Count > 0)
{
int n = IntegerUtility.Random(files.Count);
string file = files.Remove(n);
result.Add(file);
}
return result;
2
甲Fisher-Yates-Durstenfeld shuffle为O(n)并应给予公正的分配。
创建一个帮助/扩展方法来perform an in-place shuffle在阵列从GetFiles
返回:
// uses ShuffleInPlace extension from https://stackoverflow.com/a/5589250/55847
var arrayOfFiles = Directory.GetFiles("folder");
arrayOfFiles.ShuffleInPlace();
如果你喜欢返回一个新的序列 - 点菜LINQ - 你可以创建一个合适的替代Shuffle
extension method:
// uses Shuffle extension from https://stackoverflow.com/a/1653204/55847
var sequenceOfFiles = Directory.EnumerateFiles("folder").Shuffle();
相关问题
- 1. 随机输出到文件
- 2. Sitecore Rocks:随机序列化文件夹
- 3. 随机化NetworkX输出
- 4. 如何随机化输出
- 5. 创建随机文件夹,复制到随机文件夹
- 6. 如何随机化C++中的输出
- 7. 随机化字符输出到文本文件
- 8. 随机化并输出项目列表到文本文件
- 9. 文件输出与随机数
- 10. C++:用随机名输出文件
- 11. 随机书写顺序输出文件?
- 12. 如何列出随机文件夹下的文件大小?
- 13. 输出到C中的文件时出现随机字符串
- 14. 从文件夹中拉出随机图像
- 15. 选择所有,并给随机输出(随机排序输出)
- 16. 随机阅读文件夹的内容
- 17. 随机文件夹从(不重复)
- 18. 复制随机文件夹很快
- 19. vb.net选择随机文件夹名称
- 20. 随机AudioFile表格资产文件夹
- 21. (JavaScript)随机文本输出 - 建议?
- 22. 随机化从plist文件中拉出的字符串
- 23. Bash比较文件中的随机行并输出消息
- 24. 随机读取文件并在标签中输出
- 25. 在ffmpeg输出中生成随机文件名
- 26. Java随机选择csv文件中的行用于输出
- 27. 文件夹结构SSIS的输出文件和输出文件
- 28. 从文件夹JQuery中选择随机图像文件
- 29. 使用Matlab随机访问文件夹中的文件
- 30. PHP - 随机从文件夹中获取文件并回显
看一看:http://stackoverflow.com/questions/1816534/random-playlist-algorithm – Oliver 2010-05-25 09:36:35