2011-03-01 3 views
1

{"a1", "a2", "b0", "b2", "c1", ...}과 같은 문자열의 정렬 된 목록이 있고 "b"에서 시작하는 첫 번째 요소의 색인을 결정하려고한다고 가정 해보십시오. .NET 4에서 가장 빠른 방법은 무엇입니까? 기억은 문제가되지 않습니다. 대한 경우정렬 된 목록의 부분 키 일치 <string>

+0

"b"를 첫 번째 문자로 갖는 첫 번째 요소의 색인을 원한다는 의미입니까? (즉, 2) – Toby

+2

가능한 [이] (http://stackoverflow.com/questions/457160/themost-efficient-algorithm-to-find-first-prefix-match-from-a-sorted-string- arra) –

+0

고마워, 조엘! 정확히 내가 필요로하는 것! – UserControl

답변

0

"가장 빠른"당신이 다음 대략 이런

뭔가 "구현하는 가장 쉬운 방법"을 의미 :

static int FirstIndex(this IEnumerable<T> coll, Predicate<T> pred) 
{ 
    var it = coll.GetEnumerator(); 

    int index = 0; 

    while(it.MoveNext()) 
    { 
     if(pred(it.Current)) 
     { 
      return index; 
     } 
     index++; 
    } 

    throw new ObjectNotFoundException(); 
}  

{"a1", "a2", "b0", "b2", "c1"}.FirstIndex(s => s.StartsWith("b")); 

또는 F 번호 (주의에서 Seq module를 사용하여, 난에서 다음을 사용하여 시도 적이 C#을 ...이 구문은 아마도 잘못된 것입니다).

Seq.findIndex(s => s.StartsWith("b"))(strings); 
3

사용이 :

var list = new List<string> { "a1", "a2", "b0", "b2", "c1" }; 
int index = list.FindIndex(x => x.StartsWith("b")); 

귀하의 목록이 거대하고 실적이 문제인 경우 귀하의 질문에 대한 귀하의 의견에 Joel Rondeau가 언급 한대로 중복 가능성을 고려하십시오.

+0

이것은 굉장합니다! 나는 3 년 동안'List '을 사용했고이 방법에 대해 몰랐다. –