2009-08-05 2 views
2

.NET 2.0을 사용 중입니다. 큰 문자열 배열이 있습니다. 특정 문자열이 배열에 있는지 여부를 확인하고 싶습니다. 다음 코드가 최적화되었는지 또는 최적화가 필요한지 확실하지 않습니다. 안내하십시오.확인 방법 문자열 배열에 특정 문자열이 들어 있습니까?

string []test_arr= new string[]{"key1","key2","key3"}; 
Boolean testCondition = (new List<string>(test_arr)).Contains("key3"); 
나는 또한 더 약

  1. .NET 제네릭
  2. .NET 어떤 좋은 참고 또는 책
  3. .NET 반사

이 속성을 알고 싶어

, 그 누군가가 이미 나를 도와주세요!

답변

8
string []test_arr= new string[]{"key1","key2","key3"}; 
bool testCondition = Array.Exists 
(
    test_arr, 
    delegate(string s) { return s == "key3";} 
); 
+5

하나를 사용하는 제안 합니다만, 대리인의 몸은 수익의 == "KEY3"'해야한다;' – LukeH

+1

감사 루크, 메모리에서 작성되었다. 코드를 수정했습니다. –

+0

아마도 Lamda와 대리자 표기법을 혼합했을 것입니다. – Dykam

2

당신이 (정적 Array.Sort 방법을 사용)하여 배열을 정렬하고 또는 당신이 당신의 문자열을보다 최적화 된 데이터 구조를 사용할 필요가 Array.BinarySearch

사용할 수는 가능합니다.

1

.NET Framework 버전 2.0에서 Array 클래스는 System.Collections.Generic.IList, System.Collections.Generic.ICollection 및 System.Collections.Generic.IEnumerable 제네릭 인터페이스를 구현합니다.

은 따라서 다음과 같은 작업을 수행 할 수 있습니다

string[] test_arr = new string[]{"key1","key2","key3"}; 
Boolean testCondition = ((IList<string>)test_arr).Contains("key3"); 
1

목록은 O (N)이며, SortedList는 샘플에서 O (로그 n)이

1

가장 큰 오버 헤드 아마 목록의 작성 될 것입니다 ,하지만 시위의 일부일 수도 있습니다.

int x = Array.IndexOf<string>(test_arr, "key3"); 
bool testCondition = x >= 0; 

을하지만 옵션이있는 경우, 그 첫 번째 장소에 보관하는 HashSet<string>를 사용하는 것이 더 효율적이 될 것입니다 : 배열에서 시작

, 다음이 아마 더 빨리 될 것입니다. HashSet은 O (1)에있는 요소의 존재를 검사 할 수 있습니다. 더 당신만큼 방법 최적화 없다 : 다른 질문에 대해서는

, 그들은 이미 SO에 요청을받은 "C#을 책"문자열의 당신의 larga 그래 배열 abouot

1

으로 예를 들어, 검색 옵션을 사용하여 배열을 사용하십시오 (첫 번째 요소부터 시작하여 찾을 때까지 각 요소를 살펴 보거나 배열 전체를 살펴보아야합니다) - 이것은 최악의 O (n) 시간을줍니다 (O 표기법은 시간을 제공합니다 프로그램이 뭔가를 성취해야 함).

검색을 최적화하고 싶으므로 해시 테이블이나 트리를 사용하는 것이 좋습니다 (데이터 세트의 크기에 따라 다름). 이렇게하면 확인해야 할 시간을 크게 줄일 수 있습니다.

1

제 대답은 Matt Howells와 매우 비슷합니다. 는하지만 StringComparison


Array.Exists<string>(stringsArray, 
       delegate(string match) 
       { 
        return match.Equals("key", StringComparison.InvariantCultureIgnoreCase) 
       }); 
관련 문제