You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart/Flutter中含Map的List中元素的索引值获取方法

在Dart中查找包含特定值的Map元素在List中的索引

在Dart里,对于包含Map的List,确实没法直接用indexOf(毕竟indexOf是找完全匹配的元素,而你要找的是Map内部某个键对应的值)。不过有几种简单直接的方法能实现你的需求:

方法一:用indexWhere快速查找

这是最简洁的方式,indexWhere会遍历整个List,返回第一个满足条件的元素的索引:

void main() { 
  List nums = [{'a':1,'b':6}, {'a':2,'b':7}, {'a':3,'b':8}, {'a':4,'b':9}, {'a':5,'b':10}]; 
  int targetValue = 4;
  // 匹配'a'键对应值为targetValue的元素
  int index = nums.indexWhere((element) => element['a'] == targetValue);
  print(index); // 输出3
}

小提示:如果List里没有匹配的元素,indexWhere会返回-1,实际开发里可以加个判断处理这种情况;另外如果Map可能不存在'a'这个键,建议加上空值校验,比如element['a'] != null && element['a'] == targetValue,避免潜在的空指针问题。

方法二:手动遍历(适合需要额外操作的场景)

如果你想更直观地控制遍历过程,或者需要在遍历中做一些额外处理,也可以手动循环:

void main() { 
  List nums = [{'a':1,'b':6}, {'a':2,'b':7}, {'a':3,'b':8}, {'a':4,'b':9}, {'a':5,'b':10}]; 
  int targetValue = 4;
  int index = -1;
  for (int i = 0; i < nums.length; i++) {
    if (nums[i]['a'] == targetValue) {
      index = i;
      break; // 找到第一个匹配项就退出循环
    }
  }
  print(index); // 输出3
}

这种方式适合需要收集所有匹配索引(而不只是第一个)的场景,只要去掉break,把符合条件的索引存入一个新List即可。

内容的提问来源于stack exchange,提问作者Jagdip Dhillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:57:41