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
相关产品推荐
相关产品推荐

