老实说,我不知道如何检查列表 1 是否包含第二个列表中的每个元素,但我需要它。
编辑:我想检查这两个长度相同的列表是否具有相同的值,只是索引不同
提前谢谢你
像这样的东西?
void main() {
final list1 = [5, 2, 3, 10, 2, 1, 11, 4];
final list2 = [1, 2, 3, 4, 5];
print(list1.toSet().containsAll(list2)); // true
}
首先,您需要指定"相同元素"的含义。你的意思是相等的元素(根据==
)还是相同的元素(根据identical
函数)?我将假设==
,因为这是最常见的,如果您的元素不覆盖==
,无论如何它与身份相同。
如果可能,最简单的方法是对两个列表进行排序,然后将一个列表的每个元素与位于相同位置的另一个列表的元素进行比较。这确实要求元素具有与==
一致的顺序(因此a.compareTo(b) == 0
当且仅当a == b
),并且允许您更改列表的顺序。
如果您几乎执行其他任何操作,则需要考虑如果同一元素在其中一个列表中多次出现会发生什么情况。
仅仅比较长度是不够的,因为[1, 1, 2]
和[1, 2, 2]
都有三个元素,任何一个列表的所有元素也是另一个列表的元素。如果可能出现重复的元素,您还需要计算元素。
您可以使用package:collection
中的UnorderedIterableEquality
。它对任意可迭代对象实现基于计数的相等性检查,其中包括处理列表。
例:
const unorderedEquals = UnorderedIterableEquality();
// ...
if (unorderedEquals.equals(list1, list2)) {
// ... lists have same elements ...
}