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

Dart中如何实现集合与嵌套集合内子集合的精确匹配

集合完全匹配实现方案

基础定义

嵌套集合receipt存储了所有菜品对应的原料集合,初始化代码如下:

Set dish1 = {'a', 'b'};
Set dish2 = {'c', 'd'};
Set dish3 = {'a', 'b', 'c'};
Set dish4 = {'a', 'b', 'c', 'd'};
Set receipt = {dish1, dish2, dish3, dish4};

匹配要求

传入原料集合material,需要从receipt中找到匹配的菜品集合,匹配规则如下:

  • 两个集合的元素必须完全相同,存在多余元素或者缺失元素都不算匹配
  • 集合本身是无序结构,判断时不需要考虑元素的排列顺序

匹配结果参考示例:

Set material1 = {'a', 'b'}; // 返回 dish1
Set material2 = {'a', 'b', 'c'}; // 返回 dish3
Set material3 = {'a', 'b', 'd'}; // 无匹配,返回 null
Set material4 = {'b', 'c', 'a'}; // 元素和dish3完全一致,返回 dish3

规则补充:material3 = {'a', 'b', 'd'}虽然包含了dish1的所有原料,但多了'd'、缺少对应其他菜品需要的'c',不满足完全一致的要求,所以不会匹配到dish1;material4只是元素顺序和dish3不同,元素本身完全重合,所以可以正常匹配。

实现方法

直接用编程语言原生的Set相等判断逻辑即可,几乎所有语言的Set类型的相等判断,默认就符合「元素完全一致、忽略顺序」的规则,不需要手动遍历逐个比对元素。
核心逻辑就是遍历receipt里的每一个dish集合,和传入的material做相等判断,找到第一个匹配的直接返回,全部遍历完没找到匹配项就返回null。

不同语言的简单实现参考:

Java 版本

public Set findMatchedDish(Set material, Set<Set> receipt) {
    for (Set dish : receipt) {
        if (dish.equals(material)) {
            return dish;
        }
    }
    return null;
}

Python 版本

def find_matched_dish(material: set, receipt: list[set]) -> set | None:
    for dish in receipt:
        if dish == material:
            return dish
    return None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:06:18