我在 API 文档中看到有一个sort()
方法 on List
,但我不清楚它需要什么参数。当前需要进行非常简单的直接 alpha 比较。
7 回答
1. 快速解决方案
感谢您的提问!您可以String
像这样对 s 列表进行排序:
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
上面的代码打印:
[apples, bananas, oranges]
2.稍微高级一点的用法
请注意,sort()
它不返回值。它对列表进行排序而不创建新列表。如果要在同一行中排序和打印,可以使用方法 cascades:
print(fruits..sort());
如需更多控制,您可以定义自己的比较逻辑。这是根据价格对水果进行分类的示例。
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
让我们看看这里发生了什么。
AList
有一个sort方法,它有一个可选参数:a Comparator。Comparator 是一个typedef
或函数的别名。在这种情况下,它是一个函数的别名,如下所示:
int Comparator(T a, T b)
从文档:
Comparator 函数表示这样的总排序,如果 a 小于 b,则返回负整数,如果 a 等于 b,则返回零,如果 a 大于 b,则返回正整数。
3.如何使用自定义对象列表
此外,如果您创建一个由自定义对象组成的列表,您可以添加Comparable<T>
asmixin
或继承 ( extends
) 然后覆盖该compareTo
方法,以便为sort()
自定义对象列表重新创建标准行为。有关更多信息,请查看其他相关的 StackOverflow 答案。
这是实现它的一行代码。
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
一般来说,在赛斯的详细答案中只添加一点,在
(a, b) => foo(a, b)
传入sort
,函数foo
应该回答一个整数结果,如下所示:
- 如果 a < b,结果应该 < 0,
- 如果 a = b,则结果应为 = 0,并且
- 如果 a > b,结果应该 > 0。
要使上述三分法成立,两者a
和都b
必须是Comparable
s。
使用compareAsciiUpperCase
而不是compareTo
,因为它支持字符串并自动忽略区分大小写
import "package:collection/collection.dart";
data.sort((a, b) {
return compareAsciiUpperCase(a.name, b.name);
});
https://api.flutter.dev/flutter/package-collection_collection/compareAsciiUpperCase.html
给你 。所有你必须知道的
用于对整数或字符串的简单列表进行排序
var list = [5 , -5 ,1];
list.sort(); //-5 , 1 , 5
用于反转列表顺序
list.reversed ;
用于按字段排序对象列表或地图
List<Map<String, dynamic>> list= [
{"name": "Shoes", "price": 100},
{"name": "Pants", "price": 50},
];
// from low to high according to price
list.sort((a, b) => ["price"].compareTo(b["price"]));
// from high to low according to price
list.sort((a, b) => b["price"].compareTo(a["price"]));
今天之后,你应该可以做 list.sort() 。sort 方法的参数现在是可选的,它默认为对元素本身调用 compareTo 的函数。由于 String 是 Comparable 的,它现在应该可以工作了。
我是如何解决这个问题的。
List<Product> _dataSavingListProducts = [];
List<Product> _dataSavingListFavoritesProducts = [];
void _orderDataSavingLists() {
_dataSavingListProducts.toList().reversed;
_dataSavingListFavoritesProducts.toList().reversed;
}