2008-10-31 4 views
11

을 사용하는 임의의 배열 Enumerable class in LINQ을 사용하여 무작위 배열을 생성하는 방법에 대한 MSDN Magazine의 기사를 읽었습니다. 이 기사는 VB.NET을 사용하고 난 상응하는 C#으로 무엇 즉시 확실하지 않다 :LINQ 및 C#

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

답변

20

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을 사용할 수 있습니다.

+0

은 모두의 조합으로 편집되었습니다. 당시 최고 대답이었습니다. 즐겨 찾기를 재생하지 않고 그냥 깨끗하게 유지합니다. – TheSoftwareJedi

+0

알겠습니다. 알려 주셔서 감사합니다. 참고로 James Curran의 코드입니다. – HanClinto

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

흠, I 점점 : 음, 점점 : 메서드 'System.Linq.Enumerable.OrderBy 의 형식 인수 (System.Collections.Generic.IEnumerable , System.Func ) '는 사용법에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하십시오. – Ryan

+0

@ Ryan : 누락 된 012이 – Jimmy

1

내가 비주얼 스튜디오에 액세스하지 않고 내 머리 위로 떨어져 할 수있는 베스트 (손가락을 교차) :

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

내가 처음에 정렬 알고리즘은 다중 비교를 할 필요가 있기 때문에 이것은 좋은 생각이 될 것이라고 생각 그 번호에 대해 람다를 호출 할 때마다 같은 번호에 대해 다른 정렬 키를 얻습니다. 그러나 목록의 각 요소에 대해 한 번만 호출하고 나중에 사용할 수 있도록 해당 값을 저장하는 것처럼 보입니다. 이 코드는이 보여줍니다

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 사용하여, 당신은 단지 내장 Shuffle() 방법을 사용할 수 있습니다

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

나는 그것을 좋아한다. 좋은. – Ryan

4

무엇 훨씬 더 쉽게 무언가에 관하여 ...

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