Подтвердить что ты не робот

Как искать строку в массиве String

Мне нужно искать строку в массиве строк. Я не хочу использовать любой для зацикливания в нем

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

string theString = "One"

Мне нужно проверить, присутствует ли переменная var в обр.

4b9b3361

Ответ 1

Каждый метод, о котором упоминалось ранее, выполняет цикл как внутри, так и снаружи, поэтому не важно, как его реализовать. Вот еще один пример поиска всех ссылок целевой строки

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

Ответ 2

Ну, что-то придется искать, а цикл более эффективен, чем рекурсия (так как рекурсия хвоста не реализована полностью)... поэтому, если вы просто не хотите зацикливать себя, то любой из

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

или

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

Для справки: избегать имен, таких как var - это ключевое слово в С# 3.0.

Ответ 3

Должна ли быть строка []? A 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");

Ответ 4

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

Ответ 5

Я думаю, что лучше использовать Array.Exists, чем Array.FindAll.

Ответ 6

Это довольно просто. Я всегда использую этот код для поиска строки из массива строк

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

Ответ 7

Если массив отсортирован, вы можете использовать BinarySearch. Это операция O (log n), поэтому она быстрее, чем циклическая. Если вам нужно применить несколько поисков и скорость, вы можете сортировать ее (или копию) перед ее использованием.

Ответ 9

Почему запрет "Я не хочу использовать какой-либо цикл"? Это самое очевидное решение. Если у вас есть шанс быть очевидным, возьмите его!

Обратите внимание, что вызовы типа arr.Contains(...) по-прежнему будут циклическими, это будет не тот, кто написал цикл.

Считаете ли вы альтернативное представление, которое более подходит для поиска?

  • Хорошая реализация набора будет хорошо работать. (HashSet, TreeSet или локальный эквивалент).
  • Если вы можете быть уверены, что arr будет сортироваться, вы можете использовать двоичный поиск (который нужно будет перезаписывать или цитировать, но не так часто, как прямой линейный поиск).

Ответ 10

На первом снимке я мог бы придумать что-то вроде этого (но это псевдокод и предполагая, что вы не можете использовать какие-либо встроенные библиотеки .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);

Ответ 11

В С#, если вы можете использовать ArrayList, вы можете использовать метод Contains, который возвращает boolean:

if MyArrayList.Contains("One")

Ответ 12

Вы можете использовать Найти метод типа массива. От .NET 3.5 и выше.

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

Вот несколько примеров:

// 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"); }

Вот тот же код, сокращенный анонимным методом:

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

Выражение лямбда сокращает его далее:

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

Ответ 13

Вы можете проверить существование элемента на

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