Development Tip

문자열 배열에서 문자열을 검색하는 방법

yourdevel 2020. 11. 2. 19:54
반응형

문자열 배열에서 문자열을 검색하는 방법


문자열 배열에서 문자열을 검색해야합니다. 나는 그것을 반복하기 위해 어떤 것도 사용하고 싶지 않습니다.

string [] arr = {"One","Two","Three"};

string theString = "One"

arr에 theString 변수가 있는지 확인해야합니다.


앞에서 언급 한 모든 메서드는 내부적으로 또는 외부 적으로 반복되므로 구현 방법이 실제로 중요하지 않습니다. 대상 문자열의 모든 참조를 찾는 또 다른 예

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

글쎄, 무언가를보아야 할 것이고, 루프는 재귀보다 더 효율적입니다 (테일 엔드 재귀가 완전히 구현되지 않았기 때문에) ... 따라서 자신을 루프하지 않으려면 다음 중 하나를 수행하십시오.

bool has = arr.Contains(var); // .NET 3.5

또는

bool has = Array.IndexOf(arr, var) >= 0;

정보 : var와 같은 이름을 피하십시오 -이것은 C # 3.0의 키워드입니다.


string []이어야합니까? List <String>은 필요한 것을 제공합니다.

List<String> testing = new List<String>();
testing.Add("One");
testing.Add("Two");
testing.Add("Three");
testing.Add("Mouse");
bool inList = testing.Contains("Mouse");

Array.FindAll 보다 Array.Exists 를 사용하는 것이 더 낫다고 생각합니다 .


bool exists = arr.Contains("One");

꽤 간단합니다. 나는 항상이 코드를 사용하여 문자열 배열에서 문자열을 검색합니다.

string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
int pos = Array.IndexOf(stringArray, value);
if (pos > -1)
{
    return true;
}
else
{
    return false;
}

배열이 정렬 된 경우 BinarySearch 를 사용할 수 있습니다 . 이것은 O (log n) 연산이므로 루핑보다 빠릅니다. 여러 검색을 적용해야하고 속도가 문제가되는 경우 사용하기 전에 정렬 (또는 복사본) 할 수 있습니다.


IList를 구현하는 각 클래스에는 Contains (Object value) 메서드가 있습니다 . System.Array도 마찬가지입니다.


"루핑을 사용하고 싶지 않습니다"가 금지 된 이유는 무엇입니까? 이것이 가장 확실한 해결책입니다. 분명해질 기회가 주어지면 가져 가십시오!

같은 호출 arr.Contains(...)은 여전히 반복 될 것입니다. 루프를 작성한 사람은 귀하가 아닙니다.

검색에 더 적합한 대체 표현을 고려해 보셨습니까?

  • 좋은 Set 구현은 잘 수행 될 것입니다. (HashSet, TreeSet 또는 이에 상응하는 로컬).
  • arr정렬 된 것이 확실하다면 이진 검색을 사용할 수 있습니다 (재귀 또는 루프가 필요하지만 직선 선형 검색만큼 자주 필요하지 않음).

첫 번째 샷에서 나는 이와 같은 것을 생각해 낼 수 있습니다 (하지만 이것은 의사 코드이며 .NET 내장 라이브러리를 사용할 수 없다고 가정합니다). 약간의 조정과 재검토가 필요할 수 있지만, 시작하기에 충분해야할까요?

int findString(String var, String[] stringArray, int currentIndex, int stringMaxIndex)
    {
    if currentIndex > stringMaxIndex 
       return (-stringMaxIndex-1);
    else if var==arr[currentIndex] //or use any string comparison op or function
       return 0;
    else 
       return findString(var, stringArray, currentIndex++, stringMaxIndex) + 1 ;
    }



    //calling code
    int index = findString(var, arr, 0, getMaxIndex(arr));

    if index == -1 printOnScreen("Not found");
    else printOnScreen("Found on index: " + index);

C #에서 ArrayList를 사용할 수 있으면 부울을 반환하는 Contains 메서드를 사용할 수 있습니다.

if MyArrayList.Contains("One")

You can use Find method of Array type. From .NET 3.5 and higher.

public static T Find<T>(
    T[] array,
    Predicate<T> match
)

Here is some examples:

// we search an array of strings for a name containing the letter “a”:
static void Main()
{
  string[] names = { "Rodney", "Jack", "Jill" };
  string match = Array.Find (names, ContainsA);
  Console.WriteLine (match);     // Jack
}
static bool ContainsA (string name) { return name.Contains ("a"); }

Here’s the same code shortened with an anonymous method:

string[] names = { "Rodney", "Jack", "Jill" };
string match = Array.Find (names, delegate (string name)
  { return name.Contains ("a"); } ); // Jack

A lambda expression shortens it further:

string[] names = { "Rodney", "Jack", "Jill" };
string match = Array.Find (names, n => n.Contains ("a"));     // Jack

You can check the element existence by

arr.Any(x => x == "One")

참고URL : https://stackoverflow.com/questions/264962/how-to-search-a-string-in-string-array

반응형