dart 如何在Flutter中对列表进行两次排序?

pgky5nke  于 2022-12-15  发布在  Flutter
关注(0)|答案(2)|浏览(186)

我想对列表进行两次排序。
示例列表(以下是包含型号的示例列表):

[Model("A", 5), Model("C", 3), Model("B", 7) Model("F", 5), Model("D", 5)]

我想要的是先按字母顺序排序,然后按数字顺序排序。如果我这样做,我会得到下面的结果:

[Model("C", 3), Model("A", 5), Model("D", 5) Model("F", 5), Model("B", 7)]

其他:
按字母顺序排序:

[Model("A", 5), Model("B", 7), Model("C", 3) Model("D", 5), Model("F", 5)]

按数字排序:

[Model("C", 3), Model("A", 5), Model("F", 5) Model("D", 5), Model("B", 7)]

我的代码:

Stream<List<T>> function<T>({
  …
  int Function(T lhs, T rhs) sort,
}) {
  …
  List<T> result = …;
  result.sort(sort);
}
Stream<List<Model>> stream() {
  return function(
    …
    sort: (a, b) => a.alphabet.toLowerCase().compareTo(b.alphabetc.toLowerCase())
  );
}

如果您需要更多信息,请随时发表评论。
如何对一个列表进行两次排序?我将感激任何帮助。提前感谢你!

qnyhuwrf

qnyhuwrf1#

尝试以下代码,首先,在Model类上实现Comparable类,并像这样实现compareTo方法:

class Model implements Comparable {
  final String char;
  final int number;

  Model(this.char, this.number);

  @override
  toString() {
    return "Model('$char', '$number')";
  }
  
  @override
  int compareTo(other) {

    if (other is Model) {
      if (number == other.number) {
        return other.char.compareTo(char);
      } else {
        return other.number.compareTo(number);
      }
    } else {
      return 0;
    }
  }
}

那么,举个例子

List<Model> a = [
    Model("A", 5),
    Model("C", 3),
    Model("B", 7),
    Model("F", 5),
    Model("D", 5),
  ];

尝试对它进行排序会得到你想要的结果:

a.sort((a, b) => b.compareTo(a) );
print(a); // [Model('C', '3'), Model('A', '5'), Model('D', '5'), Model('F', '5'), Model('B', '7')]
shstlldc

shstlldc2#

你可以这样叫它两次:

modelList.sort(
  (a, b) => a.alphabet.compareTo(b.alphabet),
);
modelList.sort(
  (a, b) => a.number.compareTo(b.number),
);

在您情况下:

Stream<List<T>> function<T>({
  …
  
  int Function(T lhs, T rhs) sort1,
  int Function(T lhs, T rhs) sort2,
}) {
  …
  List<T> result = …;
  result.sort(sort1);
  result.sort(sort2);
}

结果:

for (var element in modelList) {
  print("element = ${element.alphabet}"); //C, A, D, F, B
}

相关问题