在列表数组中查找索引

时间:2019-02-15 03:52:50

标签: c# arrays list

我有一个以下数组。我想找到列表中有M的数组的索引,所以应该给我2。

??

我尝试了以下操作:

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

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

但是它不起作用,它返回-1,因为第二个参数是一个列表。请不要使用Linq

4 个答案:

答案 0 :(得分:1)

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;
}

答案 1 :(得分:0)

由于“搜索项”是列表的子项,因此您首先需要搜索每个列表。这可以通过Linq完成。将Linq Query的结果与Array.IndexOf结合起来,您可以将结果查找为

var result  =  Array.IndexOf(final,final.FirstOrDefault(x => x.Contains(searchString)));

答案 2 :(得分:0)

只需提出一些替代方法,如果您想抛弃阵列,则可以使用标准的 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

答案 3 :(得分:0)

请记住,在名为 final 的数组的每个索引处都有一个List<string>,因此您不能使用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;
}