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

C#实现Dictionary<string, List<string>>字典的比较验证

C# 字典子集(包含关系)判断实现

基础定义

待比较的两个字典声明如下:

Dictionary<string, List<string>> Test1 = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> Test2 = new Dictionary<string, List<string>>();

判定规则

源字典包含于目标字典,需要同时满足两个条件:

  • 源字典的所有键,在目标字典中都存在
  • 源字典每个键对应的List<string>值,与目标字典同键对应的值完全一致(元素个数、顺序、内容完全匹配)
    不满足任意一条,即判定为不存在包含关系。

验证示例

  • 反例:Test1包含键A、B、C,A对应值[Apple, Banana],B对应[Grape, Pears],C对应[Orange, cherry];Test2中A对应值为[Apple, Banana, Watermelon],其余键值和Test1一致,最终判定Test1不包含于Test2。
  • 正例:Test3所有键值和上述Test1完全一致;Test4除了包含Test3全部键值对外,额外新增键D,对应值[Mango, Pineapple, plum],最终判定Test3包含于Test4。

可复用实现代码

直接写扩展方法即可全局调用:

public static class DictionaryExtensions
{
    /// <summary>
    /// 判断当前字符串-字符串列表字典是否为目标字典的子集(即被目标字典包含)
    /// </summary>
    /// <param name="source">源字典</param>
    /// <param name="target">目标字典</param>
    /// <param name="stringComparison">字符串比较规则,默认严格大小写匹配</param>
    /// <returns>源字典包含于目标字典返回true,否则返回false</returns>
    public static bool IsSubsetOf(
        this Dictionary<string, List<string>> source,
        Dictionary<string, List<string>> target,
        StringComparison stringComparison = StringComparison.Ordinal)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        if (target == null) throw new ArgumentNullException(nameof(target));

        foreach (var (key, sourceList) in source)
        {
            // 目标字典不存在当前键,直接判定不满足
            if (!target.TryGetValue(key, out var targetList))
            {
                return false;
            }

            // 列表长度不同,必然不一致
            if (sourceList.Count != targetList.Count)
            {
                return false;
            }

            // 逐元素比较
            for (int i = 0; i < sourceList.Count; i++)
            {
                if (!string.Equals(sourceList[i], targetList[i], stringComparison))
                {
                    return false;
                }
            }
        }

        return true;
    }
}

调用方式

// 默认规则:严格匹配大小写、严格匹配列表顺序
bool result = Test1.IsSubsetOf(Test2);

// 忽略字符串大小写的比较场景
bool ignoreCaseResult = Test1.IsSubsetOf(Test2, StringComparison.OrdinalIgnoreCase);

补充说明:如果业务上不需要严格匹配列表内元素的顺序,可以在比较前先对sourceList和targetList按相同规则排序,再做逐元素比较即可。

内容的提问来源于stack exchange,提问作者Gopal Krishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:03:25