如何正确判断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
相关产品推荐
相关产品推荐

