Set*_*add 40
谢谢你的提问!您可以像这样对字符串列表进行排序:
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印:
apples, bananas, oranges
Run Code Online (Sandbox Code Playgroud)
请注意,sort()不返回值.它在不创建新列表的情况下对列表进行排序.如果要在同一行中排序和打印,可以使用方法级联:
print(fruits..sort());
Run Code Online (Sandbox Code Playgroud)
要获得更多控制,您可以定义自己的比较逻辑.以下是根据价格对水果进行分类的示例.
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
Run Code Online (Sandbox Code Playgroud)
让我们看看这里发生了什么.
List有一个sort方法,它有一个可选参数:Comparator.比较器是一个typedef或函数别名.在这种情况下,它是一个函数的别名,如下所示:
int Comparator(T a, T b)
Run Code Online (Sandbox Code Playgroud)
来自文档:
如果a小于b,则比较器函数通过返回负整数来表示这样的总排序,如果a等于b则返回零,如果a大于b,则返回正整数.
Oma*_*sam 12
var list = [5 , -5 ,1];
list.sort(); //-5 , 1 , 5
Run Code Online (Sandbox Code Playgroud)
list.reversed;
Run Code Online (Sandbox Code Playgroud)
List<Map<String, dynamic>> list= [
{"name": "Shoes", "price": 100},
{"name": "Pants", "price": 50},
];
// from low to high according to price
list.sort((a, b) => a["price"].compareTo(b["price"]));
// from high to low according to price
list.sort((a, b) => b["price"].compareTo(a["price"]));
Run Code Online (Sandbox Code Playgroud)
这是实现它的一行代码。
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
Run Code Online (Sandbox Code Playgroud)
使用compareAsciiUpperCase而不是compareTo,因为它支持字符串并自动忽略区分大小写:
import "package:collection/collection.dart";
data.sort((a, b) {
return compareAsciiUpperCase(a.name, b.name);
});
Run Code Online (Sandbox Code Playgroud)
import 'package:enumerable/enumerable.dart';
void main(List<String> args) {
var strings = ["c", "bb", "b", "cc", null, "a", 'ccc'];
var query = strings.orderByDescending((s) => s?.length ?? 0).thenBy((s) => s);
print(query.toList());
}
Run Code Online (Sandbox Code Playgroud)
结果:
[ccc,bb,cc,a,b,c,null]
仅在赛斯的详细答案中添加一点,一般来说,在
(a, b) => foo(a, b)
Run Code Online (Sandbox Code Playgroud)
传入sort,该函数foo应按如下方式回答整数结果:
对于三分法的上述法律持有,两者a并b必须Comparable秒。