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

C# 리스트(List)에서 무작위 요소를 선택하는 방법

C#에서 리스트에 저장된 여러 요소 중 하나를 무작위(랜덤)로 선택하는 것은 게임 개발, 데이터 샘플링, 추첨 로직 등 다양한 상황에서 자주 사용되는 기능입니다. 이 글에서는 Random 클래스를 활용해 리스트에서 임의의 요소를 간단하게 가져오는 방법을 알아보겠습니다.

핵심 원리

무작위 요소를 선택하는 원리는 매우 간단합니다. Random.Next() 메서드로 0부터 (리스트 개수 − 1) 사이의 임의의 인덱스를 생성한 뒤, 해당 인덱스로 리스트에 접근하면 됩니다.

먼저 문자열 리스트를 하나 생성해 보겠습니다.

var list = new List<string>{ "one", "two", "three", "four" };

다음으로 리스트의 요소 개수를 기준으로 무작위 인덱스를 만들고, 그 인덱스에 해당하는 요소를 출력합니다.

int index = random.Next(list.Count);
Console.WriteLine(list[index]);

random.Next(list.Count)는 0 이상 list.Count 미만의 정수를 반환하므로, 항상 유효한 인덱스 범위 안에서 값이 선택됩니다. 따라서 IndexOutOfRangeException 같은 오류가 발생하지 않습니다.

전체 예제 코드

C# 리스트에서 무작위 요소를 선택하려면 다음 코드를 실행해 보세요.

using System;
using System.Collections.Generic;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            var random = new Random();
            var list = new List<string>{ "one", "two", "three", "four" };
            int index = random.Next(list.Count);
            Console.WriteLine(list[index]);
        }
    }
}

실행 결과

three

프로그램을 실행할 때마다 결과는 달라질 수 있습니다. 위 예제에서는 one, two, three, four 중 하나가 매번 무작위로 출력됩니다.

응용: 확장 메서드로 재사용성 높이기

여러 곳에서 무작위 선택 기능을 자주 사용한다면, 확장 메서드(Extension Method)로 만들어 두면 더욱 편리합니다.

using System;
using System.Collections.Generic;

public static class ListExtensions {
    private static readonly Random random = new Random();

    public static T GetRandom<T>(this List<T> list) {
        if (list == null || list.Count == 0)
            throw new ArgumentException("리스트가 비어 있거나 null입니다.");
        return list[random.Next(list.Count)];
    }
}

// 사용 예시
var item = list.GetRandom();

이처럼 제네릭 확장 메서드를 활용하면 어떤 타입의 리스트든 동일한 방식으로 무작위 요소를 가져올 수 있어 코드의 재사용성과 가독성이 크게 향상됩니다.