如何在Dart中从字符串列表排除含指定子串的元素?
Dart优雅实现排除包含指定子串的列表元素
需求说明
需要从字符串列表中排除包含另一子串列表中任意元素的项,得到剩余元素的结果列表。原始数据如下:
var original_list = ['cigar', 'rebut', 'focal', 'blush', 'naval', 'bench']; var exclusion_list = ['e', 'f']; var result_list = [];
在Python中可以这样实现:
for item in original_list: if not any(letter in item for letter in exclusion_list): result_list.append(item)
Dart优雅解决方案
Dart里可以用where结合any的函数式写法,和Python的逻辑完全对应,简洁又优雅:
void main() { var original_list = ['cigar', 'rebut', 'focal', 'blush', 'naval', 'bench']; var exclusion_list = ['e', 'f']; var result_list = original_list .where((item) => !exclusion_list.any((subStr) => item.contains(subStr))) .toList(); print(result_list); // 输出: [cigar, blush, naval] }
代码解释
where方法遍历原始列表,筛选出符合条件的元素,返回一个Iterableexclusion_list.any((subStr) => item.contains(subStr)):判断当前元素是否包含排除列表中的任意子串,只要有一个匹配就返回true- 加上
!取反,得到不包含任何排除子串的元素,最后用toList()把Iterable转为List类型
如果习惯循环写法,也可以简化成更简洁的版本,避免嵌套循环的繁琐:
void main() { var original_list = ['cigar', 'rebut', 'focal', 'blush', 'naval', 'bench']; var exclusion_list = ['e', 'f']; var result_list = <String>[]; for (var item in original_list) { if (!exclusion_list.any((sub) => item.contains(sub))) { result_list.add(item); } } print(result_list); }
内容的提问来源于stack exchange,提问作者UniquelyAverage
相关产品推荐
相关产品推荐

