我在API文档中看到sort()
上有List
方法,但我不清楚参数需要什么。目前的需求是进行非常简单的直接α比较。
答案 0 :(得分:31)
感谢您的提问!您可以按如下方式对字符串列表进行排序:
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
以上代码打印:
apples, bananas, oranges
请注意sort()
不返回值。它在不创建新列表的情况下对列表进行排序。如果要在同一行中排序和打印,可以使用方法级联:
print(fruits..sort());
要获得更多控制权,您可以定义自己的比较逻辑。以下是根据价格对水果进行分类的示例。
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
让我们看看这里发生了什么。
列表包含sort方法,该方法有一个可选参数:a Comparator。比较器是typedef
或函数别名。在这种情况下,它是一个函数的别名,如下所示:
int Comparator(T a, T b)
来自文档:
比较器函数通过返回a来表示这样的总排序 如果a小于b则为负整数,如果a等于b则为零,和 如果a大于b,则为正整数。
答案 1 :(得分:6)
这是实现这一目标的一行代码。
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
答案 2 :(得分:5)
延迟排序(允许对可空值进行排序) 结果是IEnumerable。
自定义比较器可以作为参数传递。
import 'package:queries/collections.dart';
void main() {
var strings = ["c", "bb", "b", "cc", null, "a", 'ccc'];
var data = new Collection<String>(strings);
var query = data.orderBy((s) => s).thenBy((s) => s.length);
print(query.asIterable());
print(query.toList());
}
输出:
(null, a, b, bb, c, cc, ccc)
[null, a, b, bb, c, cc, ccc]
答案 3 :(得分:3)
一般来说,只需在Seth的详细答案中添加一点
(a, b) => foo(a, b)
传递到sort
,函数foo
应该按如下方式回答整数结果:
对于上述三分法,a
和b
必须为Comparable
s。
答案 4 :(得分:1)
今天之后,你应该能够做list.sort()。 sort方法的参数现在是可选的,它默认为一个函数,它在元素本身上调用compareTo。由于String是可比较的,它现在应该正常工作。
答案 5 :(得分:1)
使用 set {0} = @{0}
而不是 compareAsciiUpperCase
,因为它支持字符串并自动忽略区分大小写
compareTo
https://api.flutter.dev/flutter/package-collection_collection/compareAsciiUpperCase.html
答案 6 :(得分:0)
我如何解决这个问题。
List<Product> _dataSavingListProducts = [];
List<Product> _dataSavingListFavoritesProducts = [];
void _orderDataSavingLists() {
_dataSavingListProducts.toList().reversed;
_dataSavingListFavoritesProducts.toList().reversed;
}
答案 7 :(得分:0)
你来了。所有你需要知道的
用于对整数或字符串的简单列表进行排序
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"]));