[C#] 문자열 배열에 값이 포함되어 있는지 확인하고 필요한 경우 위치를 가져옵니다.

이 문자열 배열이 있습니다.

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";

stringArray포함 여부를 결정하고 싶습니다 value. 그렇다면 배열에서 해당 위치를 찾고 싶습니다.

루프를 사용하고 싶지 않습니다. 아무도 내가 어떻게 할 수 있는지 제안 할 수 있습니까?



답변

Array.IndexOf 메서드를 사용할 수 있습니다 .

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos > -1)
{
    // the array contains the string and the pos variable
    // will have its position in the array
}


답변

var index = Array.FindIndex(stringArray, x => x == value)


답변

우리는 또한 사용할 수 있습니다 Exists:

string[] array = { "cat", "dog", "perl" };

// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perl");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));


답변

편집 : 나는 당신도 위치가 필요하다는 것을 알지 못했습니다. IndexOf명시 적으로 구현되었으므로 배열 유형의 값에 직접 사용할 수 없습니다 . 그러나 다음을 사용할 수 있습니다.

IList<string> arrayAsList = (IList<string>) stringArray;
int index = arrayAsList.IndexOf(value);
if (index != -1)
{
    ...
}

(이것은 Array.IndexOfDarin의 답변에 따라 전화하는 것과 유사합니다 -대체 접근법입니다. 왜 명시 적으로 배열 구현 되는지 분명하지 않지만 결코 신경 쓰지 않습니다 …)IList<T>.IndexOf


답변

당신은 사용할 수 Array.IndexOf()는 돌려 보낼 -1 요소가 발견되지 않은 경우 메모를 당신은이 사건을 처리해야 -.

int index = Array.IndexOf(stringArray, value);


답변

위치를 알고 싶다면 Array.IndexOf () 사용할 수 있습니다.

       string [] arr = {"One","Two","Three"};
       var target = "One";
       var results = Array.FindAll(arr, s => s.Equals(target));


답변

배열에 주어진 값이 포함되어 있는지 확인하는 가장 좋은 System.Collections.Generic.IList<T>.Contains(T item)방법은 다음과 같은 방법 을 사용 하는 것입니다.

((IList<string>)stringArray).Contains(value)

완전한 코드 샘플 :

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
if (((IList<string>)stringArray).Contains(value)) Console.WriteLine("The array contains "+value);
else Console.WriteLine("The given string was not found in array.");

T[]배열 List<T>은 Count 및 Contains와 같은 몇 가지 메소드를 비공개로 구현합니다 . 명시 적 (비공개) 구현이므로 먼저 배열을 캐스팅하지 않고는 이러한 메소드를 사용할 수 없습니다. 이것은 문자열에서만 작동하지 않습니다.이 클래스를 사용하여 요소의 클래스가 IComparable을 구현하는 한 모든 유형의 배열에 요소가 포함되어 있는지 확인할 수 있습니다.

모든 IList<T>방법이이 방식으로 작동하는 것은 아닙니다. IList<T>배열에서의 Add 메소드 를 사용하려고 하면 실패합니다.