2015-01-23 2 views
0

배열에서 특정 값을 원한다고 말할 수있는 방법이 있습니까? 예를 들어 이런 식으로 사용했을 수 있습니까? 이 상황에서 인덱스 배열을 사용하여 한 줄에 지정된 배열 요소를 반환하려면 어떻게해야합니까?

string[] values = new string[]{"boogie","woogie","all","night"}; 

string[] refinedValues = values.GetIndexes(new int[]{ 0, 2 }); 

, refinedValues는 숫자 및 "boogie" "all"를 포함한 배열 될 것이다.

+0

과 같을 것이다이

var refinedValues = new[] { 0, 2 }.Select(values.ElementAt); 

사용자 정의 확장 방법을 수행 할 수 있습니다 - 당신에게 있지만, 직접 쓰실 수 있습니다. –

+0

'GetIndexes'를 작성하는 방법에 대한 질문은? – ryanyuyu

답변

2

당신은하지 내장이

public static class EnumerableExtensions { 
    public static IEnumerable<T> GetValues<T>(this IEnumerable<T> enumerable, params Int32[] indices) { 
     return indices.Select(enumerable.ElementAt); 
    } 
} 
+1

호기심에서 나는 벤치마킹을했다. 이 솔루션은 Jonesy의 솔루션이나'join '으로 직접 시도한 것에 비해 훨씬 많은'values'를 가진 가장 빠른 것입니다. 나는 이것이'indices.Select'가'indices'의 반복 횟수 만하고 반복되는 반복마다 배열 인덱스를 효율적으로 찾았 기 때문이라고 생각합니다. –

+0

네, 필드 이름별로 특정 열을 요청할 수있는 CSV 파서로 구현했습니다. 160 만 개의 레코드와 9 개의 필드가있는 테스트 CSV 파일이 있습니다. 놀랍지 않게 기록 된 필드의 수는 작업 실행 시간에 영향을주지 않습니다. 전반적으로 데이터를 적절한 목록으로 처리하는 데 15 초가 걸립니다. 나쁘지는 않지만 .Net 솔루션을 확장하는 대신 문자로 파일을 파싱해야 할 수도 있습니다. – CanadaIT

1

예, LINQ의 비트를 사용

string[] values = new string[] { "boogie", "woogie", "all", "night" }; 

var indexes = new[] {0, 2}; 
string[] refinedValues = values.Where((e, i) => indexes.Contains(i)).ToArray(); 

//refined-values contains "boogie", "all" 
관련 문제