从Dart地图迭代和提取键/值的最佳方法?

时间:2020-07-14 06:06:14

标签: arrays flutter dart hashmap

给予

Map<String, List<String>>其中:

  • 是团队代码
  • 是玩家名称列表。

何时

当用户选择一个名字时,我需要通过与球员名单进行比较来输出球队代码(可能会有重复的名字和其他我尚未充分考虑的东西)。

我确实找到了可行的方法,但是不确定当数据量增加时它是否能正常工作。

//Team Map Example    
var teamMap = {
  "TeamFoo": ["Bob", "John", "Jill"],
  "TeamBar": ["Mike", "Fred"]
};

//Loop Example
teamMap.forEach((key, value) {
   if (value.indexOf(_lastName) >= 0) {
      teamName = key;
   }
});

是否有更好的方式编写此功能以提高速度或可读性?

1 个答案:

答案 0 :(得分:1)

我要做的一项改进是在找到值时停止操作,如果重复,则您的方法是合适的,因为无论如何您都必须迭代整个地图。

如果没有重复,这就是我要怎么做。

代码:

String teamCode = teamMap.keys.firstWhere((key) => teamMap[key].contains(_lastName));

说明:

teamMap.keys =>返回地图的键列表

teamMap[key] =>返回对应于该键的玩家列表

对于每个键

检查相应的列表是否包含 _lastName teamMap[key].contains(_lastName));

但是,要处理重复项,我建议添加“#”后跟重复项计数。如果那不适合玩家的名字,那就用你的想象力消除重复的东西。

让我知道您是否遇到任何错误。

此外,如果您喜欢可视化文档,了解常规Map / List / Set方法i'd recommend this page