문제

MSDN Magazine 사용에 관한 기사를 읽고있었습니다. LINQ에서 열거 가능한 클래스 임의의 배열을 생성합니다. 이 기사는 vb.net을 사용하며 C#에 등가가 무엇인지 확실하지 않습니다.

Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
    OrderBy(Function() rnd.Next)
도움이 되었습니까?

해결책

그만큼 개발자 Fusion vb.net to C# 변환기 동등한 C# 코드는 다음과 같습니다.

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

향후 참조를 위해, 그들은 또한 a C# to vb.net 변환기. 거기 있습니다 다른 몇 가지 도구 이것도 가능합니다.

다른 팁

나는 정렬 알고리즘이 숫자를 여러 번 비교해야하기 때문에 처음에는 이것이 나쁜 아이디어라고 생각했으며, 해당 숫자에 대해 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);
Random rnd = new Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

훨씬 더 쉬운 것은 어떻습니까 ...

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

Visual Studio (크로스 손가락)에 접근하지 않고 머리 꼭대기에서 할 수 있습니다.

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

사용 C5 일반 수집 라이브러리, 당신은 단지 내장을 사용할 수 있습니다 Shuffle() 방법:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top