C#에서 배열 섞기

Muhammad Maisam Abbas 2024년2월16일
  1. C#에서Random클래스를 사용하여 배열 섞기
  2. C#에서RNGCryptoServiceProvider클래스를 사용하여 배열 셔플
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

위의 코드에서 우리는 정수 배열arrRandom.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()를 정의했습니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

관련 문장 - Csharp Array