2008-10-31 21 views
11

Rasgele bir dizi oluşturmak için MSDN Magazine hakkında Enumerable class in LINQ kullanımı hakkında bir makale okuyorum. makale VB.NET kullanır ve eşdeğer C# nedir hemen emin değilim:Rastgele dizi kullanarak LINQ ve C#

Dim rnd As New System.Random() 
Dim numbers = Enumerable.Range(1, 100). _ 
    OrderBy(Function() rnd.Next) 

cevap

20

Developer Fusion VB.Net to C# converter eşdeğer C# kodu olduğunu söyler: İleride

System.Random rnd = new System.Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next()); 

Ayrıca, C# to VB.Net converter var. Bunun için several other tools mevcuttur.

+0

herkesin kombinasyonu olmak üzere düzenlenmiştir. Bu zamanda en iyi cevaptı. Favorileri çalmıyorum, sadece temiz tutuyorum. – TheSoftwareJedi

+0

Tamam, bana bildirdiğiniz için teşekkürler. Sadece referans olarak, bu James Curran'ın kodu. – HanClinto

5
Random rnd = new Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next()); 
+0

Hmmm, ben 'm alma: Hmmm, alıyorum: "System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable , System.Func ) 'kullanımdan çıkarılamaz. Tip argümanlarını açıkça belirtmeyi deneyin. – Ryan

+0

@Ryan: eksik parens – Jimmy

1

Ben Visual Studio erişimi olmayan kafamın üst kapalı yapabileceği en iyi (parmaklarını haçlar):

System.Random rnd = New System.Random(); 
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next); 
5

Başlangıçta sıralama algoritması çoklu karşılaştırma yapmak gerekir çünkü bu kötü bir fikir olacağını düşündüm Sayılar için ve bu sayı için lambda'yı her aradığında aynı numara için farklı bir sıralama anahtarı alır. Ancak, listedeki her öğe için yalnızca bir kez çağırıyor gibi görünüyor ve daha sonra kullanmak için bu değeri depolar. Bu kod, bu gösterir:

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); 
1

C5 Generic Collection Library kullanarak, sadece yerleşik Shuffle() yöntemi kullanabilirsiniz:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100)); 
numbers.Shuffle(); 
+0

Bunu beğendim. Güzel. – Ryan

4

Ne çok daha kolay bir şey hakkında ...

Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())