首页 > 解决方案 > 我应该更喜欢迭代 Map.entries 还是 Map.values?

问题描述

每次我需要Map在 Dart 中迭代 a 的值时,我都会考虑这个循环将产生的成本,包括复杂性和产生的垃圾数量。有两种方法可以迭代 a Map:Map.valuesMap.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对象,则可能entriesvalues. 的实现细节Map深藏在 Dart 库中,所以我想知道是否有人有这方面的知识并且可以阐明这个主题。

我了解这Map.entries使您可以访问密钥,但我说的是不需要使用条目密钥的情况。我也明白有不同的实现Map。我对默认实现最感兴趣LinkedHashMap,但是如果很高兴知道Map这方面的不同实现之间是否存在差异。

标签: dart

解决方案


我们应该根据需求迭代地图。

  1. 如果我们只需要迭代键

    map.keys.forEach((k) => print("Key : $k"));

  2. 如果我们只需要迭代值

    map.values.forEach((v) => print("Value: $v"));

  3. 如果我们需要迭代两个键值。

    map.forEach((k, v) => print("Key : $k, Value : $v"));


推荐阅读