dart - 我应该更喜欢迭代 Map.entries 还是 Map.values?
问题描述
每次我需要Map
在 Dart 中迭代 a 的值时,我都会考虑这个循环将产生的成本,包括复杂性和产生的垃圾数量。有两种方法可以迭代 a Map
:Map.values
和Map.entries
. 例如:
Map<String, Person> people;
int olderThan(int age) {
int result = 0;
for(Person p in people.values)
if(p.age > age) result++;
return result;
}
int olderThan2(int age) {
int result = 0;
for(MapEntry<String, Person> me in people.entries)
if(me.value.age > age) result++;
return result;
}
// Which one is faster: olderThan or olderThan2?
如果Map
在内部将其值存储为MapEntry
对象,则可能entries
与values
. 的实现细节Map
深藏在 Dart 库中,所以我想知道是否有人有这方面的知识并且可以阐明这个主题。
我了解这Map.entries
使您可以访问密钥,但我说的是不需要使用条目密钥的情况。我也明白有不同的实现Map
。我对默认实现最感兴趣LinkedHashMap
,但是如果很高兴知道Map
这方面的不同实现之间是否存在差异。
解决方案
我们应该根据需求迭代地图。
如果我们只需要迭代键
map.keys.forEach((k) => print("Key : $k"));
如果我们只需要迭代值
map.values.forEach((v) => print("Value: $v"));
如果我们需要迭代两个键值。
map.forEach((k, v) => print("Key : $k, Value : $v"));
推荐阅读
- c - 需要有关格式字符串漏洞的帮助
- hive - 使用滞后函数的配置单元中的 AnalysisException 错误
- r - ggplot中的间距和自定义x轴刻度
- jenkins - Team Foundation Server 插件在 Jenkins 中不可用
- asp.net-mvc - ASP.NET CORE MVC 加载表页面耗时太长
- c++ - 为什么 Clang 和 MSVC 不喜欢带有一组冗余括号的成员 typedef 声明?
- c++ - 使用类成员而不是向量的向量来转置矩阵
- node.js - 在另一个模块中定义 EventEmitter 处理程序而不导出功能
- php - 添加域时,我无法在项目中注册/添加新用户,但它正在本地主机上运行
- angular - 订阅 LoggedIn Observable 不起作用