You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart初学者求助:MapEntry转Map的方法及频率统计返回问题

Dart:将MapEntry转换为Map的实用方法

我在解决统计列表数字出现频率的DSA问题时,写了一个返回MapEntry<int, int>的函数(代码如下),现在需要把这个MapEntry转换成完整的Map,这里整理几种可行的方法:

MapEntry<int, int> findMostFrequent(List<int> numbers) {
  final frequency = <int, int>{};

  for (int i = 0; i < numbers.length; i++) {
    if (!frequency.containsKey(numbers[i])) {
      frequency[numbers[i]] = 1;
    } else {
      frequency[numbers[i]] = frequency[numbers[i]]! + 1;
    }
  }
  return frequency.entries.reduce((a, b) {
    final aValue = a.value;
    final bValue = b.value;
    if (aValue == bValue) {
      return a.key > b.key ? b : a;
    }
    return aValue > bValue ? a : b;
  });
}

方法1:直接构造新Map

这是最直观的方式,利用Map字面量语法,把MapEntry的key和value直接放入新Map:

MapEntry<int, int> entry = findMostFrequent([1, 2, 2, 3]);
Map<int, int> resultMap = {entry.key: entry.value};

方法2:使用Map.fromEntries()

这个方法适合处理单个或多个MapEntry的转换,传入包含目标MapEntry的列表即可:

MapEntry<int, int> entry = findMostFrequent([1, 2, 2, 3]);
Map<int, int> resultMap = Map.fromEntries([entry]);

方法3:通过addAll()方法构建

先初始化一个空Map,再用addAll()把MapEntry对应的键值对添加进去:

MapEntry<int, int> entry = findMostFrequent([1, 2, 2, 3]);
Map<int, int> resultMap = <int, int>{};
resultMap.addAll({entry.key: entry.value});

额外:自定义扩展方法(Dart 2.7+)

如果需要频繁转换,可以给MapEntry写一个扩展方法,让代码更简洁:

extension MapEntryExtension<K, V> on MapEntry<K, V> {
  Map<K, V> toMap() => {key: value};
}

// 使用方式
MapEntry<int, int> entry = findMostFrequent([1, 2, 2, 3]);
Map<int, int> resultMap = entry.toMap();

内容的提问来源于stack exchange,提问作者Bharath OS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 07:18:10