检查数组是否包含另一个数组及其在 DART/Flutter 中的位置

check if array contains another array and its position in DART/Flutter

在dart语言中,我想检查这个数组元素=[1,1]是否存在于这个数组中

list=[[0, 3], [0, 4], [1, 0], [1, 1], [1, 2], [1, 3]] 

如果确实如此,请告诉我确切的位置(在本例中为 3)。

我尝试了 indexOf 但它不起作用,总是 returns -1

你可以使用这个功能:

int isInList(List<List<dynamic>> list, List<dynamic> element) {
  for (int i = 0; i < list.length; i++) {
    var e = list[i];
    if (e.length == element.length) {
      bool rejected = false;
      for (int j = 0; j < e.length; j++) {
        if (e[j] != element[j]) {
          rejected = true;
        }
      }
      if (!rejected) {
        return i;
      }
    }
  }
  return -1;
}

问题是您有一个列表列表,而 indexOf 不会比较内部列表的元素。

您可以使用indexWhere() 来获取项目的位置。并且您应该考虑到您正在尝试在列表中查找列表。您预期的列表包含两个项目。所以你可以像这样在给定的列表中搜索它:

    var list = [
      [0, 3],
      [0, 4],
      [1, 0],
      [1, 1],
      [1, 2],
      [1, 3]
    ];

    var element = [1, 1];

    var index = list.indexWhere(
        (el) => el.first == element.first && el.last == element.last);

    print(index); // output will 3

感谢@pskink,您还可以使用 listEquals 方法导入包。

    import 'package:flutter/foundation.dart';

///...

    var s = list.indexWhere((el) => listEquals(el, element));
    print(s);