如何在颤振中对列表进行两次排序?



我想对列表进行两次排序。

示例列表(这里是一个带有模型的示例列表):

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

如果你需要更多的信息,请随时留下评论。

如何对列表进行两次排序?我将感激任何帮助。提前感谢!

尝试以下代码,首先,在您的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')]

你可以像这样连续调用它两次:

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
}

最新更新