2012-05-17 5 views
3

을 감안할 때 두 배열 :슬라이스 배열 선택 마스크를 기반으로

double[] a = new double[]{1.0, 2.0, 3.0}; 
bool[] b = new bool[]{true, false, true}; 

b에 따라 a에서 선택하는 쉬운 방법이 있나요? R 및 기타 스크립트 언어에서 당신은 말할 것입니다 :

a[b] 

{1.0, 3.0}를 얻을 수 있습니다. C#에서 이렇게하는 깨끗한 (노골적인 루프가 포함되지 않은) 방법이 있는지 알아낼 수 없습니다. 어쩌면 데이터를 다르게 구성해야합니까?

답변

5

이 사용 LINQ를 얻을 수 있습니다

double[] a = new double[]{1.0, 2.0, 3.0}; 
bool[] b = new bool[]{true, false, true}; 
var result = a.Where((item, index)=>b[index]); 
+0

무엇이 달성할까요? – Jon

+0

@ 존, 오류를 지적 해 주셔서 감사합니다. 코드를 수정했습니다. – RePierre

+0

잘못된 사용. 조건은 어디에 있습니까? 결과에 b의 사본 만 작성합니다. –

6

사용 LINQ는 Zip 방법, 예를 들면 :

a.Zip(b, (i, j) => new {i, j}).Where(x => x.j).Select(x => x.i) 
+1

+1 : D : D –

+0

@DaveBish, 고마워. –

+1

멋진 접근 방식으로 우편 방법에 대해 알지 못했습니다. –

4

이 전통적인 LINQ 방법도 있습니다 : 우편 번호에 대한

b.Select((f, i) => f ? i : - 1).Where(i => i != -1).Select(i => a[i]); 
관련 문제