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