我需要按大多數重復元素對陣列進行排序,如下所示:
List<String> list = ['x','y','z','x','y','y']
期望的輸出:
[y,y,y,x,x,z]
uj5u.com熱心網友回復:
我建議將頻率計算移到排序回圈之外。
void main() {
List<String> list = ['x', 'y', 'z', 'x', 'y', 'y'];
Map<String, int> numberOf = {
for (var x in list.toSet()) x: list.where((item) => item == x).length
};
print(list..sort((a, b) => numberOf[b]!.compareTo(numberOf[a]!)));
}
控制臺日志
[y, y, y, x, x, z]
uj5u.com熱心網友回復:
您可以使用排序功能來做到這一點。這是一個作業示例:
void main() {
List list = ['x', 'y', 'z', 'x', 'y', 'y'];
List copyList = List.from(list);
list.sort((var a, var b) {
int numberOfA = copyList.where((element) => element == a).length;
int numberOfB = copyList.where((element) => element == b).length;
return numberOfB.compareTo(numberOfA);
});
print(list);
}
uj5u.com熱心網友回復:
使用排序功能的其他示例:
void main() {
List list = ['x', 'y', 'z', 'x', 'y', 'y'];
list.sort((a, b) => b.compareTo(a),);
}
有關compareTo的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441049.html
下一篇:如何對字典中的串列進行排序?C#
