简体   繁体   English

按重复元素对列表进行排序 flutter

[英]Sort a list by repeated elements flutter

I need to sort an array by most duplicated elements like this:我需要按这样的大多数重复元素对数组进行排序:

List<String> list = ['x','y','z','x','y','y']

Desired output:所需的 output:

[y,y,y,x,x,z]

I would suggest moving the frequencies calculation outside of the sorting loop.我建议将频率计算移到排序循环之外。

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]!)));
}

Console log控制台日志

[y, y, y, x, x, z]

You can do it using the sort function. Here is a working sample:您可以使用排序 function 来完成。这是一个工作示例:

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);
}

Other example using sort function:使用排序 function 的其他示例:

void main() {
  List list = ['x', 'y', 'z', 'x', 'y', 'y'];
  list.sort((a, b) => b.compareTo(a),);
}

more information about compareTo有关compareTo的更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM