Flutter Tips之 - Operator on Iterable<T> in Dart

931 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

如果想要做两个列表,我希望从列表一去掉第二个列表里的数据

const allNames = ['foo', 'bar', 'baz', 'qux'];
const disallowedNames = ['foo', 'qux'];

最简单粗暴的方式就是for循环,然后if判断, 但是呢这种方式和的复杂度高。

如果说官方提供一个方法,那就太完美了。但是并没有,那么我能不能自己写一个呢?

思路是:给Iterable增加一个拓展,然后可以再where()汗水守护的帮助下从这个实例中移除第二个Iterable<T>的内容

extension RemoveAll<E> on Iterable<E> {
    Iterable<E> operator -(Iterable<E> other) => where(
        (e) => !other.contains(e),
    );
}

测试一下

void testIt() {
    final result = allNames - disallowedNames;
    result.log(); // bar, baz
}

这样看起来舒服多了。