프로그래밍 세계에서는 주어진 컬렉션에서 무작위 하위 집합을 추출해야 하는 경우가 많습니다. LINQ 매니아라면 이를 달성하기 위한 최적의 방법이 궁금할 것입니다.
한 가지 접근 방식은 Fisher-Yates-Durstenfeld 셔플을 수행하는 .Shuffle() 확장 메서드를 활용하는 것입니다. 이 방법은 컬렉션의 요소 순서를 효과적으로 무작위화하여 무작위 하위 컬렉션을 생성하는 데 이상적인 솔루션입니다.
사용법을 설명하기 위해 N개 항목이 포함된 yourCollection이라는 컬렉션이 있고 다음을 수행하려고 한다고 가정해 보겠습니다. n
var randomItems = yourCollection.Shuffle().Take(n);
이 코드를 먼저 .Shuffle() 메서드를 사용하여 yourCollection의 요소를 섞습니다. 그런 다음 .Take() 메서드를 사용하여 섞인 컬렉션에서 처음 n개 항목을 추출합니다. 결과는 개수 n의 무작위 하위 컬렉션입니다.
다음은 .Shuffle() 확장 메서드를 직접 구현하는 예입니다.
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]; } } }
이 확장 메서드를 활용하면 다음을 쉽게 수행할 수 있습니다. LINQ 쿼리 내에서 임의 크기의 무작위 하위 컬렉션을 섞고 추출합니다. 이 기술은 일반적인 데이터 조작 작업에 편리하고 효율적인 솔루션을 제공합니다.
위 내용은 무작위 하위 집합을 얻기 위한 최적의 LINQ 접근 방식은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!