임의 하위 컬렉션에 대한 최적의 LINQ 쿼리: 셔플
더 큰 컬렉션에서 특정 개수의 무작위 셔플 컬렉션을 생성하는 방법은 여러 가지가 있습니다. LINQ를 사용합니다.
효율적인 접근 방식 중 하나는 LINQ에서 확장 방법으로 구현할 수 있는 Fisher-Yates-Durstenfeld 셔플 알고리즘:
public static class EnumerableExtensions { 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]; } } }
'N' 항목 컬렉션에서 'n' 개수의 무작위 하위 컬렉션을 검색하려면(여기서 n <) ;= N, 간단히 Shuffle() 확장 메서드를 적용한 다음 Take(n):
var randomItems = yourCollection.Shuffle().Take(n);
위 내용은 LINQ를 사용하여 무작위 하위 컬렉션을 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!