LINQ 및 C#을 사용한 랜덤 어레이
-
05-07-2019 - |
문제
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();
제휴하지 않습니다 StackOverflow