在C#列表容器中查找和/或访问值

在C#列表容器中查找和/或访问值,c#,arrays,list,C#,Arrays,List,我确实找到了一些与这个问题相关的解决方案,但它仍然不适合我 我有一个整数数组“数字”列表,其中包含一些整数序列,如下所示: List<int[]> numbers; numbers = new List<int[]>(); numbers.Add(new int[] { 0, 1, 2, 3, 5, 6, 8, 9, 11, 12, 13, 14 }); // 0 numbers.Add(new int[]

我确实找到了一些与这个问题相关的解决方案,但它仍然不适合我

我有一个整数数组“数字”列表,其中包含一些整数序列,如下所示:

        List<int[]> numbers;
        numbers = new List<int[]>();
        numbers.Add(new int[] { 0, 1, 2, 3, 5, 6, 8, 9, 11, 12, 13, 14 }); // 0
        numbers.Add(new int[] { 1, 4, 7, 10, 13 }); // 1
        numbers.Add(new int[] { 0, 1, 2, 5, 6, 7, 8, 9, 12, 13, 14 }); // 2
int[] results = MyList.ToArray<int>();
        k = numbers.IndexOf(results);
        Console.WriteLine(k);
输出为(-1),但不是匹配序列的实际索引

-1表示未找到,而当我将其显示到控制台时,我发现它是完全匹配的序列。。我很想知道为什么它不起作用

我还尝试迭代原始列表,找到匹配的序列,然后显示其索引。但也不起作用:

        //for (int i = 0; i < numbers.Count(); i++)
        //{
        //    if (results == numbers[i])
        //        Console.WriteLine(i);
        //}
//for(int i=0;i
非常感谢

这个
方法列出了什么。IndexOf
方法

搜索指定的对象并返回该对象的从零开始的索引 整个列表中的第一个匹配项

包含相同元素的两个数组不是同一个对象。它们是两个完全不同的物体。“保存”这些数组的变量在程序内存中有两个不同的引用。这些引用指向两个不同的位置

解决您的问题的一个方法可能是:

var indexOfResults = -1;
for(var index=0; index<numbers.Size; i++)
{
    if(results.Length == numbers[index].Length 
       && results.Except(numbers[index]).Count() == 0)
    { 
        indexOfResults = index;
        break;
    }
} 
var indexOfResults=-1;

对于
IndexOf
中的(var index=0;index),这两个数组作为参考而不是值进行比较。这意味着,由于数组位于内存中的不同位置,因此使用
IndexOf
方法进行比较时,它们将不相等(即使它们的元素相等)

您可以使用Linq中的
FindIndex
SequenceEqual
方法查找索引:

numbers.FindIndex(collection => collection.SequenceEqual(results));

这将比较数组的元素,并返回带有匹配元素的
numbers
中第一个数组的索引。

您能输出结果数组的外观吗?还有
TempImg.Data是什么?
?在这种情况下,
List.IndexOf
所做的工作是试图找到与其中一个元素相等的对象在列表中。但是您要求查找一个整数数组(
int[]
),而不是单个的
int
,因此当然,它没有找到。没有这样的函数可以满足您的要求。您需要自己编写。我可以输出结果。
code
TempImg.Data
code
是图像的像素数组(这里我正在检查3x5图像的哪个像素是黑色的)然后想象结果(在本例中是MyList)是像素{0,1,2,3,5,6,8,9,11,12,13,14}。然后我想检查匹配序列并得到它的索引。谢谢@John和@Gread。我现在得到了。它比较的是内存地址,但不是实际值。我得到了。你是对的。它比较的是内存地址,但不是实际值(永远不相等/匹配)多谢各位@Christos@KhalilKhalaf不客气!我很高兴我帮了忙:)谢谢。这正是我要找的@E.莫法特
numbers.FindIndex(collection => collection.SequenceEqual(results));