Programing

문자열이 배열입니까?

crosscheck 2020. 8. 23. 08:21
반응형

문자열이 배열입니까?


string[]요소가 포함되어 있는지 확인하기 위해 를 찾는 가장 좋은 방법은 무엇입니까? 이것은 나의 첫 번째 샷이었습니다. 그러나 아마도 내가 간과하고있는 것이있을 것입니다. 배열 크기는 200 개 요소보다 크지 않습니다.

bool isStringInArray(string[] strArray, string key)
{
    for (int i = 0; i <= strArray.Length - 1; i++)
        if (strArray[i] == key)
            return true;
    return false;
}

이미 내장 된 Contains () 메서드를 사용하십시오.

using System.Linq;

//...

string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
    //...
}

나는 이것이 오래되었다는 것을 알고 있지만, 나는 새로운 독자들이 제네릭과 확장 방법을 사용하여 이것을 수행하는 새로운 방법이 있다는 것을 알고 싶었다.

이 작업을 수행하는 방법에 대한 자세한 정보를 보려면 블로그 게시물읽을 수 있지만 주요 아이디어는 다음과 같습니다.

이 확장 메서드를 코드에 추가하면 :

public static bool IsIn<T>(this T source, params T[] values)
{
    return values.Contains(source);
}

다음과 같이 검색을 수행 할 수 있습니다.

string myStr = "str3"; 
bool found = myStr.IsIn("str1", "str2", "str3", "str4");

모든 유형에서 작동합니다 (좋은 equals 메소드를 작성하는 한). 확실히 모든 값 유형.


단순히 Array.Exists 함수 (또는 약간 더 편리한 .NET 3.5를 사용하는 경우 Contains 확장 메서드) 뒤에 있습니다.


Linq (S & G 용) :

var test = "This is the string I'm looking for";
var found = strArray.Any(x=>x == test);

또는 요구 사항에 따라

var found = strArray.Any(
    x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));

배열이 정렬되어 있습니까? 그렇다면 이진 검색을 할 수 있습니다. 다음은 .NET 구현입니다. 배열이 정렬 된 경우 이진 검색은 모든 반복 솔루션에 대한 성능을 향상시킵니다.


일반적으로 배열은 특정 개체가 컬렉션에 있는지 여부를 묻고 자 할 때 사용하기에 좋지 않은 데이터 구조입니다.

이 검색을 자주 실행 Dictionary<string, something>하는 경우 배열보다는 을 사용하는 것이 좋습니다. 사전 검색은 O (1) (일정 시간)이고 배열 검색은 O (N)입니다 (배열 길이에 비례하는 시간 소요).

배열이 최대 200 개 항목 일지라도 이러한 검색을 많이 수행하면 사전이 더 빨라질 수 있습니다.


LINQ를 사용하여 배열을 반복 할 수도 있습니다. 또는 대리자를 검색하는 Find 메서드를 사용할 수 있습니다. 그러나 나는 find 메소드가 그냥 반복하는 것보다 조금 더 비싸다고 생각합니다.


위의 스레드에서 여러 번 언급했듯이 사용중인 프레임 워크에 따라 다릅니다. .Net Framework 3 이상에는 배열에 대한 .Contains () 또는 Exists () 메서드가 있습니다. 아래의 다른 프레임 워크의 경우 배열을 반복하는 대신 다음 트릭을 수행 할 수 있습니다.

((IList<string>)"Your String Array Here").Contains("Your Search String Here")

효율성에 대해 잘 모르겠습니다 ... Dave


이는 수동으로 어레이를 반복하는 것보다 빠릅니다.

static bool isStringInArray(string[] strArray, string key)
    {

        if (strArray.Contains(key))
            return true;
        return false;
    }

Linq를 사용하고 싶지 않거나 단순히 사용할 수없는 경우 정적 Array.Exists(...);함수를 사용할 수도 있습니다 .

https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

var arr = new string[]{"bird","foo","cat","dog"};

var catInside = Array.Exists( 
  arr, // your Array
  (s)=>{ return s == "cat"; } // the Predicate
);

When the Predicate do return true once catInside will be true as well.

참고URL : https://stackoverflow.com/questions/501194/is-string-in-array

반응형