LINQ 최적화: 무작위로 섞인 하위 컬렉션 얻기
더 큰 컬렉션의 무작위 하위 집합을 검색하는 효율적인 방법을 결정하는 것은 일반적인 과제입니다. 프로그램 작성. LINQ 쿼리의 경우 한 가지 접근 방식은 Shuffle() 확장 메서드를 활용하는 것입니다.
Shuffle 메서드:
Shuffle() 메서드는 IEnumerable 컬렉션을 입력으로 사용합니다. 그리고 그것의 섞인 버전을 반환합니다. 이 방법은 컬렉션에 있는 요소의 무작위 순서를 얻어야 할 때 특히 유용합니다.
Fisher-Yates-Durstenfeld Shuffle:
Shuffle() 방법 컬렉션을 섞는 강력하고 효율적인 수단을 제공하는 Fisher-Yates-Durstenfeld 섞기 알고리즘을 사용합니다. 이 알고리즘에는 요소를 후속 요소와 무작위로 교체하면서 컬렉션을 반복하는 작업이 포함됩니다.
LINQ 확장 방법:
아래는 Fisher- IEnumerable과 함께 사용하기 위한 Yates-Durstenfeld 셔플 컬렉션:
public static class EnumerableExtensions { public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source) { return source.Shuffle(new Random()); } public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng) { if (source == null) throw new ArgumentNullException(nameof(source)); if (rng == null) throw new ArgumentNullException(nameof(rng)); return source.ShuffleIterator(rng); } private static IEnumerable<T> ShuffleIterator<T>( this IEnumerable<T> source, Random rng) { var buffer = source.ToList(); for (int i = 0; i < buffer.Count; i++) { int j = rng.Next(i, buffer.Count); yield return buffer[j]; buffer[j] = buffer[i]; } } }
사용법:
Shuffle() 메서드를 활용하려면 원하는 컬렉션에서 간단히 호출하면 됩니다.
var yourCollection = new List<int> { 1, 2, 3, 4, 5 }; var randomItems = yourCollection.Shuffle().Take(3);
이렇게 하면 컬렉션에서 무작위 항목 3개가 섞인 컬렉션이 생성됩니다. 기본적으로 Shuffle() 메서드는 무작위화를 위해 새로운 Random() 인스턴스를 사용합니다. 사용자 정의 셔플링 동작을 위해 사용자 정의 Random 인스턴스를 지정할 수도 있습니다.
위 내용은 LINQ를 사용하여 컬렉션에서 무작위 하위 집합을 효율적으로 가져올 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!