2013-10-24 8 views

답변

5

Where 확장 메소드의 오버로드가 두 번째 인수로 Func<TSource, int, bool> predicate입니다.

Func<TSource, int, bool>에있는 int 공란 계가 출처의 색인입니다.

일반적인 경우에 대한
output = array1.Where((x, index) => array2[index]); 
+0

감사합니다! 그것은 결국 .toArray()가 필요합니다. – Marco

+1

@Marco 결과로 배열이 필요한 경우 예;) –

3

에서 Linq에에 잃었어요

이 시도 :

var bools = new[] { true, false }; 
var elements = new[] { 1, 2 }; 
var result = elements 
    .Take(bools.Length) 
    .Where((e, index) => bools[index]).ToList(); 

Take 방법은 요소 검색이 bools 배열의 인덱스 범위에서 이루어집니다 보장합니다.

1

, 사용자 정의 확장 방법을 쓸 수있다 - 예를 들면 :

var enabled = array1.WhereEnabled(array2); 

아마도 벡터 전문화와 :

public static IEnumerable<T> WhereEnabled<T>(
    this T[] source, 
    bool[] flags) 
{ 
    int max = Math.Min(source.Length, flags.Length); 
    for (int i = 0; i < max; i++) 
    { 
     if (flags[i]) yield return source[i]; 
    } 
} 
바로 다음

public static IEnumerable<T> WhereEnabled<T>(
    this IEnumerable<T> source, 
    IEnumerable<bool> flags) 
{ 
    using(var sourceIter = source.GetEnumerator()) 
    using(var flagIter = flags.GetEnumerator()) 
    { 
     while(sourceIter.MoveNext() && flagIter.MoveNext()) 
     { 
      if (flagIter.Current) yield return sourceIter.Current; 
     } 
    } 
} 

관련 문제