OrderBy /按Flutter / Dart中的次要值对列表进行重复

时间:2019-11-08 17:40:34

标签: flutter dart

如何对具有次要值的列表进行排序-那么该列表首先按一个值排序,然后对于第一个值的重复项,然后按次要值对列表进行排序?基本上,我需要使用orderby valueOne,valueTwo在SQL查询中获得的功能。

valueOne和valueTwo都是整数。

我可以使用以下单个值进行排序:

list.sort((a, b) => a.listValueOne.compareTo(b.ListValueOne));

1 个答案:

答案 0 :(得分:1)

import 'package:enumerable/enumerable.dart';

void main(List<String> args) {
  var strings = ['a', 'c', 'b', 'ccc', 'aaa'];
  var query = strings.orderByDescending((s) => s.length).thenBy((s) => s);
  print(query.toList());
}

结果:

[aaa, ccc, a, b, c]

另一个示例(三重排序):

import 'package:enumerable/enumerable.dart';

void main(List<String> args) {
  final persons = [
    Person('Jack', 'Alabama', 33),
    Person('Adam', 'Florida', 21),
    Person('Jack', 'Nevada', 10),
    Person('Harry', 'California', 17),
    Person('Jack', 'Alabama', 10),
  ];

  final q = persons
      .orderBy((p) => p.name)
      .thenBy((p) => p.state)
      .thenBy((p) => p.age);
  print(persons);
  print(q);
}

class Person {
  int age;
  String name;
  String state;
  Person(this.name, this.state, this.age);

  String toString() => '$name-$state-$age';
}

结果:

[Jack-Alabama-33, Adam-Florida-21, Jack-Nevada-10, Harry-California-17, Jack-Alabama-10]
(Adam-Florida-21, Harry-California-17, Jack-Alabama-10, Jack-Alabama-33, Jack-Nevada-10)