Dart/Flutter 如何判断数组是否包含指定子数组并获取其下标
Dart嵌套列表查找下标返回-1问题解决方案
问题根因
Dart中的List属于引用类型,默认==运算符比较的是两个列表的内存地址,而非内部元素值。你调用indexOf时传入的[1,1]是全新的列表实例,和目标数组中存储的[1,1]内存地址不同,因此会被判定为不匹配,始终返回-1。
解决方案
使用indexWhere方法自定义匹配规则即可,两种常用实现方式如下:
1. 固定长度子元素轻量实现
如果目标数组的所有子元素都是固定长度的二元数组,可以直接逐个比较元素值:
void main() { List<List<int>> list = [[0, 3], [0, 4], [1, 0], [1, 1], [1, 2], [1, 3]]; List<int> target = [1, 1]; int index = list.indexWhere((item) => item[0] == target[0] && item[1] == target[1]); print(index); // 输出3 }
2. 任意长度子元素通用实现
如果子元素长度不固定,Flutter项目可以直接使用foundation库提供的listEquals方法深度比较列表内容:
首先导入依赖:
import 'package:flutter/foundation.dart';
然后实现查找逻辑:
void main() { List<List<int>> list = [[0, 3], [0, 4], [1, 0], [1, 1], [1, 2], [1, 3]]; List<int> target = [1, 1]; int index = list.indexWhere((item) => listEquals(item, target)); print(index); // 输出3 }
纯Dart项目可以自行实现列表内容比较逻辑:
bool listEquals(List<int> a, List<int> b) { if (a.length != b.length) return false; for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) return false; } return true; }
内容的提问来源于stack exchange,提问作者omar
相关产品推荐
相关产品推荐

