You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在List<int[]>中查找int[2]类型元素的索引?

问题原因及解决建议

为什么IndexOf返回-1?

数组是引用类型,List<T>.IndexOf(T)默认使用引用相等性判断——它比较的是两个数组对象的内存地址,而非数组内的元素值。你创建的new int[] {3,4}是全新的数组对象,和列表中已存在的{3,4}数组不是同一个实例,所以找不到匹配项,返回-1。

解决方法

方法1:使用FindIndex自定义元素匹配逻辑

直接用FindIndex方法,传入lambda表达式手动判断数组元素是否符合条件:

var index = coordinates.FindIndex(arr => 
    arr.Length == 2 && arr[0] == 3 && arr[1] == 4);
Console.WriteLine(index); // 输出1,符合预期

这种方式简单直接,适合单次或简单的查找场景。

方法2:自定义相等比较器(适合多次复用)

如果需要频繁进行数组元素的相等判断,可以实现IEqualityComparer<int[]>接口封装比较逻辑:

public class IntArrayEqualityComparer : IEqualityComparer<int[]>
{
    public bool Equals(int[] x, int[] y)
    {
        if (x == null || y == null)
            return x == y;
        if (x.Length != y.Length)
            return false;
        for (int i = 0; i < x.Length; i++)
        {
            if (x[i] != y[i])
                return false;
        }
        return true;
    }

    public int GetHashCode(int[] obj)
    {
        if (obj == null) return 0;
        int hash = 17;
        foreach (int num in obj)
        {
            hash = hash * 31 + num.GetHashCode();
        }
        return hash;
    }
}

然后使用IndexOf的重载版本传入自定义比较器:

var index = coordinates.IndexOf(new int[] {3,4}, new IntArrayEqualityComparer());
Console.WriteLine(index); // 输出1,符合预期

这种方式将比较逻辑封装,适合多次重复使用的场景,代码更整洁。

内容的提问来源于stack exchange,提问作者J B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:17:04