我在 API 文档中看到
sort()
上有一个 List
方法,但我不清楚它需要什么参数。当前的需求是进行非常简单的直接 alpha 比较。
谢谢你的提问!您可以像这样对
String
列表进行排序:
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
上面的代码打印:
[apples, bananas, oranges]
请注意,
sort()
不返回值。它对列表进行排序而不创建新列表。如果想在同一行排序和打印,可以使用方法级联:
print(fruits..sort());
为了进行更多控制,您可以定义自己的比较逻辑。这是根据价格对水果进行排序的示例。
main() {
final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
让我们看看这里发生了什么。
A
List
有一个 sort 方法,该方法有一个 可选 参数:一个 Comparator。比较器是 typedef
或函数别名。在本例中,它是一个函数的别名,如下所示:
int Comparator(T a, T b)
来自文档:
比较器函数表示这样的总排序:如果 a 小于 b,则返回负整数;如果 a 等于 b,则返回零;如果 a 大于 b,则返回正整数。
此外,如果您创建由自定义对象组成的列表,则可以将
Comparable<T>
添加为 mixin
或继承 (extends
),然后重写 compareTo
方法,以便重新创建sort()
用于您的自定义对象列表。有关更多信息,请查看这个其他相关的 StackOverflow 答案。
这是实现它的一行代码。
fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
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) => a["price"].compareTo(b["price"]));
// from high to low according to price
list.sort((a, b) => b["price"].compareTo(a["price"]));
在 Seth 的详细答案中仅添加一点,一般来说,在
(a, b) => foo(a, b)
传递给
sort
,函数foo
应该回答一个整数结果,如下所示:
要使上述三分法成立,
a
和b
都必须是Comparable
s。
compareAsciiUpperCase
而不是 compareTo
,因为它支持字符串并自动忽略区分大小写:
import "package:collection/collection.dart";
data.sort((a, b) {
return compareAsciiUpperCase(a.name, b.name);
});
今天之后,您应该能够执行 list.sort() 。 sort 方法的参数现在是可选的,并且默认为对元素本身调用compareTo 的函数。由于字符串是可比较的,它现在应该可以工作了。
如何根据 dart 中的长度对字符串列表进行排序。
List<String> words = ["mass","as","hero","superhero"];
words.sort((w1, w2) => w1.length.compareTo(w2.length));
输出:
["as", "mass", 'hero", "superhero"]
我是如何解决这个问题的。
List<Product> _dataSavingListProducts = [];
List<Product> _dataSavingListFavoritesProducts = [];
void _orderDataSavingLists() {
_dataSavingListProducts.toList().reversed;
_dataSavingListFavoritesProducts.toList().reversed;
}