在Dart/Flutter中,如何判断一个二维列表是否包含某个列表

3

如何在不使用嵌套for循环的情况下,识别2D列表是否包含另一个列表?

我正在寻找类似于Python中的in的方法。我尝试使用list.contains(x),但它似乎无法识别列表:

List a = [[1,2],[1,1],[2,2]];
List b = [1,2];
int c = 1;

b.contains(c)    // returns true
a.contains(b)    // returns false
1个回答

4

默认情况下,Dart使用引用比较高级对象,但是当集合作为高级对象时,您需要基于值的比较。 collection 包提供了针对该情况的相等性方法。例如:

import 'package:collection/collection.dart';

void main() async {
  final element = [1, 2];
  final b = [
    [1, 2] // equal values with element but not referenced
  ];
  final c = [element];

  print(b.contains(element)); // prints false
  print(c.contains(element)); // prints true

  for (final e in b) {
    print(ListEquality().equals(e, element)); // prints true
  }
}

编辑:现在上面的解决方案仅适用于Dart-only应用程序。如果您正在开发Flutter应用程序,它提供了几种新方法:

用于列表的listEqualshttps://api.flutter.dev/flutter/foundation/listEquals.html

用于映射的mapEqualshttps://api.flutter.dev/flutter/foundation/mapEquals.html

用于集合的setEqualshttps://api.flutter.dev/flutter/foundation/setEquals.html

因此,在我们的示例中,解决方案是:

import 'package:flutter/foundation.dart';

print(b.any((e) => listEquals(e, element))); // prints true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接