2015-01-20 5 views

답변

7

인덱스의 독특한 세트를 가정. 우리는 단어에서 시작하여 일치하는 색인을 찾기보다는 각 단어를 붙잡을 수 있습니다.

List<string> result = indexes.Select(i => words[i]).ToList(); 

이 버전은 색인이 단어보다 작다고 가정 할 때 훨씬 빠릅니다. (100 개의 색인과 20,000 단어는 귀하의 사업에서 2 천만 건, 광산에서는 100 건).

+0

' IEnumerable '? 여전히 .ToList()가 필요합니까? –

+2

@EricJ .: 질문은리스트를 요구했지만, 사람들은 알고리즘의 기능이 무엇이든간에 요구하는 경향이 있음을 발견했습니다. 질문과 일치하도록 수정되었습니다. – Guvante

+0

동의하면, 인터페이스가 더 나은 코드 재사용을 제공 할 때 사람들이 인터페이스보다는 구체적인 클래스를 사용한다는 것은 종종 사실입니다. –

1

글쎄, 한 라이너 만 :

result = Enumerable.Range(0, words.Count()) 
     .Where(indexes.Contains) 
     .Select(idx => words[idx]) 
     .ToList(); 
+0

한 줄로 완전히 쓸 수 있습니다 :-) –

+0

'Where (indexes.Contains) '와의 거래는 무엇입니까? 'Where (w => indexes.Contains (w))'라고 써야한다고 생각했습니다. –

+1

@EricJ .: 유효한 함수 유형이 일치하는 한. 이 경우 두 함수 모두'Func '입니다. – Guvante