Найти индекс в массиве списков - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть следующий массив.Я хотел бы найти индекс массива, который имеет M в списке, поэтому он должен дать мне 2.

 Array    List
    0 - > B, P , C
    1 - > U, O, L
    2 - > I, N, M

List<string>[] final = new List<string>[3];

Я попробовал следующее:

Array.IndexOf(final,"M")

Но это не такработать, и он возвращает - 1, потому что второй параметр является списком.Пожалуйста, не используйте Linq

Ответы [ 4 ]

0 голосов
/ 16 февраля 2019

Имейте в виду, что у вас есть List<string> для каждого индекса массива с именем final , поэтому вы просто не можете использовать Array.IndexOf, вы должны искать ключ отдельно для каждого индекса,Следующий код является рабочим примером того, чего вы хотите достичь:

public static int SearchKey(List<string>[] array, string key)
{
    int index = 0;
    foreach(List<String> i in array)
    {
        if(i.Contains(key))
        {
            return index;
        }
        index++;
    }
    return -1;
}
0 голосов
/ 15 февраля 2019

Поскольку ваш «элемент для поиска» является вложенным элементом списка, вам сначала необходимо выполнить поиск в каждом списке. Это можно сделать с помощью Linq.Комбинируя результат Linq Query с Array.IndexOf, вы можете найти результат как

var result  =  Array.IndexOf(final,final.FirstOrDefault(x => x.Contains(searchString)));
0 голосов
/ 15 февраля 2019

Просто добавьте несколько альтернатив, если вы хотите отбросить массив, вы можете добиться следующего с помощью стандартных Linq методов

 var final = new List<List<string>>();

 var item = final.FirstOrDefault(x => x.Contains("M"));
 // do stuff with item result

 var index = final.FindIndex(x => x.Contains("M"));
 // do stuff with the index
0 голосов
/ 15 февраля 2019

Array.IndexOf будет проходить по одномерному массиву и никогда не найдет поиск string, поскольку он будет сравнивать его с List<string>.Вам придется пройти через список strings в вашем массиве:

public static int FindLetter(IList<string>[] arr, string search)
{
    for(int i = 0; i < arr.Length; ++i)
    {
        if(arr[i].Contains(search)) 
        {
            return i;
        }
    }
    return -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...