65

我在 API 文档中看到有一个sort()方法 on List,但我不清楚它需要什么参数。当前需要进行非常简单的直接 alpha 比较。

4

7 回答 7

117

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 答案

于 2012-10-15T03:46:45.033 回答
21

这是实现它的一行代码。

fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>
于 2018-08-04T10:46:02.267 回答
6

一般来说,在赛斯的详细答案中只添加一点,在

(a, b) => foo(a, b)

传入sort,函数foo应该回答一个整数结果,如下所示:

  • 如果 a < b,结果应该 < 0,
  • 如果 a = b,则结果应为 = 0,并且
  • 如果 a > b,结果应该 > 0。

要使上述三分法成立,两者a和都b必须是Comparables。

于 2012-10-15T08:42:59.300 回答
4

使用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

于 2021-02-10T14:46:48.520 回答
4

给你 。所有你必须知道的

用于对整数或字符串的简单列表进行排序

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"]));
 
于 2021-06-14T11:53:14.497 回答
1

今天之后,你应该可以做 list.sort() 。sort 方法的参数现在是可选的,它默认为对元素本身调用 compareTo 的函数。由于 String 是 Comparable 的,它现在应该可以工作了。

于 2012-10-17T14:23:38.287 回答
-2

我是如何解决这个问题的。


  List<Product> _dataSavingListProducts = [];
  List<Product> _dataSavingListFavoritesProducts = [];

  void _orderDataSavingLists() {
    _dataSavingListProducts.toList().reversed;
    _dataSavingListFavoritesProducts.toList().reversed;
  }


于 2020-08-26T22:59:08.530 回答