我正在閱讀MSDN Magazine上關於使用Enumerable class in LINQ生成隨機數組的文章。文章使用VB.NET,我沒有立即確認相當於是在C#是什麼:使用LINQ和C的隨機數組#
Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
OrderBy(Function() rnd.Next)
我正在閱讀MSDN Magazine上關於使用Enumerable class in LINQ生成隨機數組的文章。文章使用VB.NET,我沒有立即確認相當於是在C#是什麼:使用LINQ和C的隨機數組#
Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
OrderBy(Function() rnd.Next)
的Developer Fusion VB.Net to C# converter說,相當於C#代碼:
System.Random rnd = new System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());
以供將來參考,他們也有一個C# to VB.Net converter。此外還有several other tools。
Random rnd = new Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());
盡我所能了我的頭頂部做得不到到Visual Studio(交叉手指):
System.Random rnd = New System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next);
我最初以爲這將是一個糟糕的主意,因爲排序算法需要做多重比較對於數字,每次調用該數字的lambda時,它將獲得相同編號的不同排序鍵。但是,它看起來只是爲列表中的每個元素調用一次,並存儲該值供以後使用。此代碼演示了這一點:
int timesCalled = 0;
Random rnd = new Random();
List<int> numbers = Enumerable.Range(1, 100).OrderBy(r =>
{
timesCalled++;
return rnd.Next();
}
).ToList();
Assert.AreEqual(timesCalled, 100);
使用C5 Generic Collection Library,你可以只使用內置的Shuffle()
方法:
IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
什麼東西更容易...
Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())
編輯成大家的組合。這是當時的最佳答案。我不喜歡收藏,只是保持乾淨。 – TheSoftwareJedi 2008-10-31 20:42:50