GIVEN 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;
}
});
有没有更好的方法来编写此功能以提高速度或可读性?
最佳答案
我要做的一项改进是在找到值时停止。如果重复,则您的方法是合适的,因为无论如何您都必须迭代整个 map 。
如果没有重复,这就是我会怎么做。
代码:
String teamCode = teamMap.keys.firstWhere((key) => teamMap[key].contains(_lastName));
说明:teamMap.keys
=>返回 map 的键列表teamMap[key]
=>返回与该键对应的玩家列表对于每个键
检查相应的列表是否包含 _lastName
teamMap[key].contains(_lastName));
但是,要处理重复项,我建议添加“#”,然后添加重复项计数。如果那不适合玩家的名字,那就用你的想象力消除重复。让我知道您是否遇到任何错误。
另外,如果您喜欢常规Map / List / Set方法i'd recommend this page的可视化文档。
关于arrays - 从Dart map 迭代和提取键/值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62888994/