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

如何判断字符串数组列表中的元素是否存在于另一个同类型列表中

用LINQ检查字符串数组是否存在于另一个列表中

要遍历第一个字符串数组列表,判断每个数组是否存在于第二个列表中,核心是解决数组的内容匹配问题(默认数组的相等判断是引用比较,无法直接识别内容相同的不同数组实例),用LINQ可以轻松实现:

基础实现(适合小规模列表)

直接通过Select遍历List1的每个元素,结合Any和SequenceEqual判断内容是否完全匹配:

// 定义示例列表
var list1 = new List<string[]> { new[] { "A", "R1" }, new[] { "A", "R2" } };
var list2 = new List<string[]> { new[] { "A", "R1" }, new[] { "B", "R1" }, new[] { "B", "R2" } };

// 生成结果集合
var existenceResults = list1
    .Select(arr => list2.Any(targetArr => arr.SequenceEqual(targetArr)))
    .ToList();

// 输出结果:true、false
foreach (var result in existenceResults)
{
    Console.WriteLine(result);
}

优化实现(适合大规模列表)

如果List2元素数量较多,重复查询的性能会受影响。可以先将List2转换为HashSet,配合自定义的数组相等比较器,把单次查询复杂度从O(n)降为O(1):

  1. 定义数组相等比较器:
public class StringArrayEqualityComparer : IEqualityComparer<string[]>
{
    public bool Equals(string[] x, string[] y)
    {
        return x != null && y != null && x.SequenceEqual(y);
    }

    public int GetHashCode(string[] obj)
    {
        if (obj == null) return 0;
        int hash = 17;
        foreach (var str in obj)
        {
            hash = hash * 31 + (str?.GetHashCode() ?? 0);
        }
        return hash;
    }
}
  1. 转换为HashSet并查询:
var list2Set = new HashSet<string[]>(list2, new StringArrayEqualityComparer());
var optimizedResults = list1.Select(arr => list2Set.Contains(arr)).ToList();

// 输出结果同样为:true、false
foreach (var result in optimizedResults)
{
    Console.WriteLine(result);
}

内容的提问来源于stack exchange,提问作者Adolf Bernard Moncawe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:22:07