首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在地图dart2中搜索,和list.indexOf一样?

在地图dart2中搜索,和list.indexOf一样?
EN

Stack Overflow用户
提问于 2018-06-04 08:46:56
回答 3查看 2K关注 0票数 0

我使用此示例在地图中进行搜索,而不是工作:|:

代码语言:javascript
复制
  var xmenList = ['4','xmen','4xmen','test'];
  var xmenObj = {
  'first': '4',
  'second': 'xmen',
  'fifth': '4xmen',
   'author': 'test'
  };

  print(xmenList.indexOf('4xmen')); // 2
  print(xmenObj.indexOf('4xmen')); // ?

但我在最后一行代码中出现了错误TypeError: xmenObj.indexOf$1 is not a function

请帮助我在地图中搜索 object的简单方法和indexOf一样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-04 08:51:35

我找到了答案:

代码语言:javascript
复制
 print(xmenObj.values.toList().indexOf('4xmen')); // 2

或者这样:

代码语言:javascript
复制
  var ind = xmenObj.values.toList().indexOf('4xmen') ;
  print(xmenObj.keys.toList()[ind]); // fifth
票数 1
EN

Stack Overflow用户

发布于 2018-06-04 15:59:30

映射不能通过整数进行索引,因此没有与indexOf对应的操作。如果您将列表视为特定的映射,其中键始终是连续的整数,那么相应的操作应该会找到给定值的键。映射不是为此而构建的,因此遍历所有键和值是获得该结果的唯一方法。我会这样做:

代码语言:javascript
复制
K keyForValue<K, V>(Map<K, V> map, V value) {
  for (var entry in map.entries) {
    if (entry.value == value) return key;
  }
  return null;
}

Dart 2中引入了entries getter。如果还没有,那么使用map.values.toList().indexOf(value)获取迭代位置,然后使用map.keys.elementAt(thatIndex)获取相应的密钥。

如果你真的只想要数字索引,那么你可以跳过最后一步。它的效率并不高(您分配一个新的列表并复制所有的值)。另一种方法是:

代码语言:javascript
复制
int indexOfValue<V>(Map<Object, V> map, V value) {
  int i = 0;
  for (var mapValue in map.values) {
    if (mapValue == value) return i;
    i++;
  }
  return -1;
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-05 10:46:46

如果要查找所有匹配项,则可以使用.where(...)进行搜索;如果假设只有一个匹配项或只想要第一个匹配项,则可以使用firstWhere进行搜索

代码语言:javascript
复制
var found = xmenObj.keys.firstWhere(
    (k) => xmenObj[k] == '4xmen', orElse: () => null);
print(xmenObj[found]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50672254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档