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

如何正确判断Dart变量的内容是否一致?

问题原因

字符串的contains方法是检查一个字符串是否是另一个的子字符串,而非判断两者拆分后的元素是否完全一致。你当前代码存在的问题:

  • a和b是不同顺序的完整字符串,互相都不是对方的子串,所以contains返回false;
  • 当d是Pepper,Onion时,它是c的子串,contains会返回true,和你要的“判定不同”需求矛盾。
解决方案

把字符串按逗号拆分成元素,转成**集合(Set)**来比较——集合不关心元素顺序,只校验元素是否完全匹配(数量一致、元素无差异)。

修改后的代码

void main() {
  // 辅助函数:将字符串转为食材集合
  Set<String> getIngredientSet(String str) {
    return str.split(',').toSet();
  }

  var a = 'Onion,Pepper,Paneer';
  var b = 'Pepper,Paneer,Onion';
  // 比较两个集合是否相等
  if (getIngredientSet(a) == getIngredientSet(b)) {
    print('This is same');
  } else {
    print('This is not same.');
  }

  var c = 'Onion,Pepper,Paneer';
  // 测试场景1:d元素数量更少
  var d1 = 'Pepper,Onion';
  if (getIngredientSet(c) == getIngredientSet(d1)) {
    print('This is same');
  } else {
    print('This is not same.');
  }

  // 测试场景2:d包含不同元素
  var d2 = 'Onion,Pepper,Cheese';
  if (getIngredientSet(c) == getIngredientSet(d2)) {
    print('This is same');
  } else {
    print('This is not same.');
  }
}

代码说明

  • split(','):将字符串按逗号拆分为字符串列表;
  • toSet():把列表转为集合,自动忽略重复元素(如果你的场景存在重复元素,也可以用排序后的列表比较,比如str.split(',')..sort());
  • 集合的==运算符会校验两个集合的元素是否完全一致,不管顺序,刚好匹配你的需求:
    • a和b的集合元素完全相同,判定为same;
    • d1的集合元素数量少于c,d2的集合包含c没有的Cheese,都会判定为not same。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:13:31