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

Posted

技术标签:

【中文标题】检查数组是不是包含另一个数组及其在 DART/Flutter 中的位置【英文标题】:check if array contains another array and its position in DART/Flutter检查数组是否包含另一个数组及其在 DART/Flutter 中的位置 【发布时间】:2021-11-29 11:29:24 【问题描述】:

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

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

如果确实如此,请给我确切的位置(在这种情况下为 3)。

我试过 indexOf 但它不起作用,总是返回 -1

【问题讨论】:

final b = [1, 1]; final index = list.indexWhere((a) => listEquals(a, b)); print(index); 当然,欢迎您 如果 b = [1,1] 和 list = [0,1,2,3,4,5,6,7,1,1] 会怎样?我应该用什么? 【参考方案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 不会比较内部列表的元素。

【讨论】:

【参考方案2】:

您可以使用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); 

【讨论】:

以上是关于检查数组是不是包含另一个数组及其在 DART/Flutter 中的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何检查包含另一个对象数组的对象数组是不是具有属性

用PHP检查一个数组是不是包含另一个数组[重复]

如何检查一个数组是不是包含另一个数组的任何元素

检查数组是不是包含另一个数组的所有元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素