Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 문자열을 무작위로 섞는 방법 (Random + OrderBy)

C#에서 문자열의 문자 순서를 무작위로 섞으려면 Random 클래스를 활용하면 됩니다. 핵심 아이디어는 각 문자에 임의의 정렬 키를 부여한 뒤, 그 키를 기준으로 문자들을 재정렬하는 것입니다.

1단계: Random 객체 생성

먼저 난수를 생성하기 위한 Random 클래스의 인스턴스를 만듭니다.

Random r = new Random();

2단계: Next() 메서드와 OrderBy() 조합

이제 LINQ의 OrderBy() 메서드와 함께 Next() 메서드를 사용하여 문자 배열을 무작위로 정렬합니다.

string random = new string(str.ToCharArray().OrderBy(s => (r.Next(2) % 2) == 0).ToArray());

이 한 줄의 코드가 동작하는 원리는 다음과 같습니다.

  • ToCharArray() — 문자열을 char 배열로 변환합니다.
  • OrderBy(s => (r.Next(2) % 2) == 0) — 각 문자마다 true 또는 false인 임의의 정렬 키를 생성하여 그 순서대로 문자를 재배치합니다.
  • ToArray() — 정렬된 결과를 다시 배열로 변환합니다.
  • new string(...) — char 배열을 최종 문자열로 조합합니다.

전체 예제 코드

아래는 문자열을 무작위화하여 출력하는 완전한 코드입니다.

using System;
using System.IO;
using System.Linq;

class Demo {
   static void Main() {
      const string str = "electronics";
      Random r = new Random();
      string random = new string(str.ToCharArray().OrderBy(s => (r.Next(2) % 2) == 0).ToArray());
      Console.WriteLine("String = {0}", str);
      Console.WriteLine("Random String = {0}", random);
      Console.Read();
   }
}

실행 결과

String = electronics
Random String = lericsecton

참고 사항

프로그램을 실행할 때마다 무작위화된 결과는 달라집니다. 이 방식은 간단한 문자열 셔플에는 충분하지만, 통계적으로 완벽하게 균등한 분포나 높은 보안 수준의 무작위성이 필요하다면 피셔-예이츠(Fisher-Yates) 알고리즘이나 RandomNumberGenerator 같은 암호학적 난수 생성기를 사용하는 것이 더 안전합니다.