Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Dart:按频率对字符串列表进行排序_Flutter_Dart - Fatal编程技术网

Flutter Dart:按频率对字符串列表进行排序

Flutter Dart:按频率对字符串列表进行排序,flutter,dart,Flutter,Dart,我正在尝试按频率对列表进行排序 List myList = ["a", "b", "c", "d", "e", "f", "d", "d", "e"]; 我期望的结果是列表按频率排序&没有重复的元素 (myList有3个“d”和2个“e”) 最有效的方法是什么 提前谢谢 是否也可以使用地图/对象列表执行相同的系统 List myList2 = [{"letter": a, "info": myInfo}, {"letter": b, "info": myInfo}, ...] 即使不使用p

我正在尝试按频率对列表进行排序

List myList = ["a", "b", "c", "d", "e", "f", "d", "d", "e"];
我期望的结果是列表按频率排序&没有重复的元素

(myList有3个“d”和2个“e”)

最有效的方法是什么

提前谢谢


是否也可以使用地图/对象列表执行相同的系统

List myList2 = [{"letter": a, "info": myInfo}, {"letter": b, "info": myInfo}, ...]

即使不使用
package:collection
,也不难做到这一点

List myList=['a','b','c','d','e','f','d','d','e'];
//把字母的数量放在地图上,字母是关键。
最终映射={};
for(myList中的最后一个字母){
地图[字母]=地图.集装箱箱(字母)?地图[字母]+1:1;
}
//按贴图值对贴图键列表进行排序。
最终输出=map.keys.toList(可增长:false);
output.sort((k1,k2)=>map[k2].compareTo(map[k1]);
打印(输出);//[d,e,a,b,c,f]

至于第二个,您想要的输出是不清楚的,但是假设与键
字母
对应的值是
字符串
,并且您需要与第一个完全相同的输出,您可以以非常类似的方式实现它

List myList2=[
{'letter':'a','info':'myInfo'},
{'letter':'b','info':'myInfo'},
{'letter':'c','info':'myInfo'},
{'letter':'d','info':'myInfo'},
{'letter':'e','info':'myInfo'},
{'letter':'f','info':'myInfo'},
{'letter':'d','info':'myInfo'},
{'letter':'d','info':'myInfo'},
{'letter':'e','info':'myInfo'},
];
最终map2={};
对于(myList2中的最后一个m){
最后一个字母=m[‘字母’];
map2[字母]=map2.containsKey(字母)?map2[字母]+1:1;
}
最终输出2=map2.keys.toList(可增长:false);
output2.sort((k1,k2)=>map2[k2]。compareTo(map2[k1]);
打印(输出2);//[d,e,a,b,c,f]

首先使用
groupBy()
,然后使用
List.sort()
比较两个对象:
List myList=[“a”、“b”、“c”、“d”、“e”、“f”、“d”、“d”、“e”];var out=groupBy(myList,(e)=>e).values.toList()…排序((a,b)=>b.length-a.length);打印(输出);打印(输出.map((e)=>e[0])
我实际上忽略了OP提到的非常重要的部分:
最有效的方法
,对不起。我很好奇,有没有像
collection
这样的包,哪一个更有效,但不管怎样,我相信重要的是衡量实际使用中的性能。使用containsKey是不必要的循环。由于我们有目标密钥,我们可以直接检查它的可空性并提高性能<代码>地图[字母]=地图[字母]!=无效的map[letter]+1:1@HamedHamedi你真的比较了执行时间吗?在包含1500个元素的地图上使用
containsKey()
比在我的电脑上检查可空性快100多倍。请出示您的证据好吗?我想知道,如果像你说的那样,containsKey()真的没有效率/没有必要,为什么它会存在。这仅仅是为了更好的发现吗?不是为了效率低下。事情是在正确的地方使用正确的工具。我描述了我的理由,证据是dart@HamedHamedi
Maps
的源代码dart:collection?这是另一回事。我不明白你为什么要展示它。另一件事是,当您在集合中搜索某个内容时,必须扫描其字段/元素。没有迭代(或任何算法),
map[letter]
无法返回值或
null
。你还能说“不必要的循环”吗?
List myList2 = [{"letter": a, "info": myInfo}, {"letter": b, "info": myInfo}, ...]