C#에서 배열 섞기
이 자습서에서는 C#에서 배열을 섞는 방법에 대해 설명합니다.
C#에서Random
클래스를 사용하여 배열 섞기
Random
클래스는 C#에서 난수를 생성합니다. Random.Next()
메소드는 임의의 정수 값을 생성합니다. LINQ와 함께Random.Next()
메서드를 사용하여 C#에서 배열을 섞을 수 있습니다.
using System;
using System.Linq;
using System.Security.Cryptography;
namespace randomize_array {
class Program {
static void Main(string[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
Random random = new Random();
arr = arr.OrderBy(x => random.Next()).ToArray();
foreach (var i in arr) {
Console.WriteLine(i);
}
}
}
}
출력:
3
4
5
1
2
위의 코드에서 우리는 정수 배열arr
를Random.Next()
메서드와 C#의 LINQ로 섞었습니다. 먼저Random.Next()
메소드로 임의 인덱스를 생성하고OrderBy()
메소드로 각 요소를 임의 인덱스에 배치했습니다. 그런 다음ToArray()
메소드를 사용하여 결과 데이터 구조를 배열로 변환했습니다.
C#에서RNGCryptoServiceProvider
클래스를 사용하여 배열 셔플
C#의 RNGCryptoServiceProvider
클래스는 난수를 생성합니다. 이 방법은RNGCryptoServiceProvider
클래스가Random
클래스보다 더 임의적이기 때문에 이전 접근 방식보다 더 안정적입니다. RNGCryptoServiceProvider
클래스는 주로 암호화에 사용되므로Random
클래스보다 더 안전합니다. RNGCryptoServiceProvider
클래스의GetBytes()
메소드는 임의의 값 시퀀스로 바이트 배열을 채우는 데 사용됩니다. Convert.ToInt32()
메소드를 사용하여이 임의의 바이트 값을 정수로 변환 할 수 있습니다. 그런 다음이 임의의 정수를 각 요소의 인덱스로 사용할 수 있습니다. 다음 코드 예제는 C#에서RNGCryptoServiceProvider
클래스를 사용하여 배열을 섞는 방법을 보여줍니다.
using System;
using System.Linq;
using System.Security.Cryptography;
namespace randomize_array {
class Program {
static int Next(RNGCryptoServiceProvider random) {
byte[] randomInt = new byte[4];
random.GetBytes(randomInt);
return Convert.ToInt32(randomInt[0]);
}
static void Main(string[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
arr = arr.OrderBy(x => Next(random)).ToArray();
foreach (var i in arr) {
Console.WriteLine(i);
}
}
}
}
출력:
5
1
2
4
3
이 예에서 따르는 논리는 이전 접근 방식과 동일합니다. 차이점은 여기서RNGCryptoServiceProvider
클래스를 사용하여 배열에 대한 임의의 인덱스를 생성한다는 것입니다. RNGCryptoServiceProvider
클래스를 사용하여 임의의 정수 인덱스를 생성하는 메소드Next()
를 정의했습니다.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn