dart - 检查一个列表是否包含 Dart 中另一个列表的任何元素

标签 dart

我有一个数组:

const list1 = [0, 1, 2];

如何检查其他数组是否包含任何目标数组元素?

例如:

[2, 3] //returns true;

[2, 3, 4] //returns true;

[3, 4] //returns false;

最佳答案

使用 list1.indexWhere(list2.contains) 应该适用于小型列表,但对于大型 列表,渐近运行时复杂度为 O(m * n)其中 mn 是列表的大小。

提出检查一个列表是否包含另一个列表的任何元素的问题的另一种方法是检查两个列表的集合交集是否非空。实现它的直接方法是:

var contains = list1.toSet().intersection(list2.toSet()).isNotEmpty;

由于默认的 Set 实现是一个 LinkedHashSet,因此查找的复杂度为 O(1),并且计算交集对于 之一是线性的设置。但是,将每个 List 转换为 Set 需要线性时间,使得整个操作需要 O(m + n)。

这是渐近有效的,但它计算整个交集只是为了确定它是否为空,这是一种浪费。您可以通过使用 .any 提前停止并注意 .any 不会从作为 Set 的接收对象中获益来做得更好:

var set2 = list2.toSet();
var contains = list1.any(set2.contains);

请注意,如果您可以首先使用 Set 而不是 List,那么转换成本就会消失并使操作成为 O(m)。

关于dart - 检查一个列表是否包含 Dart 中另一个列表的任何元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70802642/

相关文章:

flutter - 如何使用来自 inheritedWidget 的流处理导航?

dart - polymer Dart 中的按钮单击不起作用;需要 polymer 元素

serialization - 通过MessageBox输入数据?

android - Flutter Launcher 图标没有改变?

flutter - 如何在不使用 Playstore 或 App Store 的情况下升级我的 Flutter 应用程序?

flutter - Flutter shared_preferences getString()不返回字符串?

dart - 想要将 session 空闲超时添加到较旧的AngularDart(v1.24.0 SDK)Web应用程序

dart - 自定义元素无法访问它在 shadowRoot 中的内容

dart - Google+ api 与 dart chrome 应用程序 - 403 每日限制

Flutter 将数学方程转换为数学图像