문자열 배열에서 문자열을 검색하는 방법
문자열 배열에서 문자열을 검색해야합니다. 나는 그것을 반복하기 위해 어떤 것도 사용하고 싶지 않습니다.
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
'Development Tip' 카테고리의 다른 글
투명한 CSS 배경색 (0) | 2020.11.03 |
---|---|
angularjs는 텍스트 상자에서 대문자를 강제합니다. (0) | 2020.11.02 |
PHP로 1 일 빼기 (0) | 2020.11.02 |
신속하게 원에 이미지를 설정하는 방법 (0) | 2020.11.02 |
Android에서 길게 누르기 감지 (0) | 2020.11.02 |