C# 배열 요소의 모든 조합을 효율적으로 검색
배열 요소로 작업할 때 가능한 모든 요소 조합을 추출하는 것이 유용합니다. 이 작업은 데이터 분석 및 조합 최적화와 같은 분야에서 자주 나타납니다.
반복되는 요소의 순열 및 조합
[1, 2, 3, 4] 배열이 있다고 가정합니다. 반복되는 요소가 있는 길이 2의 모든 조합을 찾으려면 다음 기능을 사용할 수 있습니다.
<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(IEnumerable<T> list, int length) { if (length == 1) return list.Select(t => new T[1] { t }); return GetPermutationsWithRept(list, length - 1) .SelectMany(t => list, (t1, t2) => t1.Concat(new T[1] { t2 })); }</code>
이 함수는 [1, 1], [1, 2] 등과 같이 반복되는 요소가 포함된 조합을 고려합니다.
순열 및 조합(반복되는 요소 제외)
중복 요소를 제외하려면 GetPermutations
함수를 사용하세요.
<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length) { if (length == 1) return list.Select(t => new T[1] { t }); return GetPermutations(list, length - 1) .SelectMany(t => list.Where(o => !t.Contains(o)), (t1, t2) => t1.Concat(new T[1] { t2 })); }</code>
이 기능은 [1, 2], [1, 3] 및 [2, 3]과 같은 조합을 보장하지만 [1, 1]은 보장하지 않습니다.
반복적인 요소가 있는 K 조합
길이 2와 반복되는 요소의 조합을 찾아 요소의 여러 발생을 허용하는 것을 고려하십시오.
<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombsWithRept<T>(IEnumerable<T> list, int length) where T : IComparable { if (length == 1) return list.Select(t => new T[1] { t }); return GetKCombsWithRept(list, length - 1) .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) >= 0), (t1, t2) => t1.Concat(new T[1] { t2 })); }</code>
이 함수는 [1, 1], [1, 2], [2, 2]와 같은 조합을 생성합니다.
K조합(반복요소 제외)
반복되는 요소가 없는 조합의 경우:
<code class="language-csharp">static IEnumerable<IEnumerable<T>> GetKCombs<T>(IEnumerable<T> list, int length) where T : IComparable { if (length == 1) return list.Select(t => new T[1] { t }); return GetKCombs(list, length - 1) .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0), (t1, t2) => t1.Concat(new T[1] { t2 })); }</code>
이 함수는 [1, 2], [1, 3], [2, 3]과 같은 조합을 생성합니다.
위 내용은 C#에서 배열 요소의 모든 조합을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!