如何检查一个列表是否包含另一个列表?.contains只允许单个值。
import 'dart:io';
void main() {
List<int> mylist_1 = [1,3,5,2,7,8];
List<int> mylist_2 = [1,3,2];
}我需要检查一下mylist_1是否有mylist_2。列表中元素的任意顺序。
发布于 2021-01-29 00:41:37
如果您不关心检查重复项,可以通过将第一个List转换为Set,然后针对第二个List调用containsAll来实现此目的
bool listContainsAll<T>(List<T> a, List<T> b) {
final setA = Set.of(a);
return setA.containsAll(b);
}发布于 2021-01-28 23:05:06
可能的解决方案(如果重复控件无关紧要):
import 'package:enumerable/enumerable.dart';
void main() {
final mylist_1 = [1, 3, 5, 2, 7, 8];
final mylist_2 = [1, 3, 2];
final contains = mylist_2.except(mylist_1).isEmpty;
print(contains);
}结果:
true更精确的检查:
import 'package:enumerable/enumerable.dart';
void main() {
final mylist_1 = [1, 3, 5, 2, 7, 8, 2];
var mylist_2 = [1, 3, 2];
_check(mylist_1, mylist_2);
mylist_2 = [1, 3, 2, 2];
_check(mylist_1, mylist_2);
mylist_2 = [1, 3, 2, 2, 2];
_check(mylist_1, mylist_2);
}
void _check<T>(List<T> mylist_1, List<T> mylist_2) {
final x1 = mylist_1.groupBy((e) => e).toMap((e) => e.key);
final x2 = mylist_2.groupBy((e) => e);
final result = x2
.takeWhile$1((e) => x1[e.key] != null && x1[e.key].length >= e.length)
.length ==
x2.length;
print(mylist_1);
print(mylist_2);
print(result);
}结果:
[1, 3, 5, 2, 7, 8, 2]
[1, 3, 2]
true
[1, 3, 5, 2, 7, 8, 2]
[1, 3, 2, 2]
true
[1, 3, 5, 2, 7, 8, 2]
[1, 3, 2, 2, 2]
falsehttps://stackoverflow.com/questions/65938960
复制相似问题