如何在 Dart 中对字符串列表进行排序?

问题描述 投票:0回答:8

我在 API 文档中看到

sort()
上有一个
List
方法,但我不清楚它需要什么参数。当前的需求是进行非常简单的直接 alpha 比较。

string list sorting dart
8个回答
153
投票

1.快速解决方案

谢谢你的提问!您可以像这样对

String
列表进行排序:

main() {
  final List<String> fruits = <String>['bananas', 'apples', 'oranges'];
  fruits.sort();
  print(fruits);
}

上面的代码打印:

[apples, bananas, oranges]

2.稍微高级一点的用法

请注意,

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,则返回正整数。

3.如何使用自定义对象列表来做到这一点

此外,如果您创建由自定义对象组成的列表,则可以将

Comparable<T>
添加为
mixin
或继承 (
extends
),然后重写
compareTo
方法,以便重新创建
sort()
用于您的自定义对象列表。有关更多信息,请查看这个其他相关的 StackOverflow 答案


29
投票

这是实现它的一行代码。

fruits.sort((String a, String b)=>a.compareTo(b)); //fruits is of type List<String>

13
投票

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

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"]));

11
投票

在 Seth 的详细答案中仅添加一点,一般来说,在

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

传递给

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

  • 如果 < b, result should be < 0,
  • 如果 a = b,结果应为 = 0,并且
  • 如果 a > b,结果应 > 0。

要使上述三分法成立,

a
b
都必须是
Comparable
s。


10
投票

使用

compareAsciiUpperCase
而不是
compareTo
,因为它支持字符串并自动忽略区分大小写:

import "package:collection/collection.dart";

data.sort((a, b) {
  return compareAsciiUpperCase(a.name, b.name);
});

2
投票

今天之后,您应该能够执行 list.sort() 。 sort 方法的参数现在是可选的,并且默认为对元素本身调用compareTo 的函数。由于字符串是可比较的,它现在应该可以工作了。


0
投票

如何根据 dart 中的长度对字符串列表进行排序。

List<String> words = ["mass","as","hero","superhero"];
words.sort((w1, w2) => w1.length.compareTo(w2.length));

输出:

["as", "mass", 'hero", "superhero"]

-2
投票

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


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

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


© www.soinside.com 2019 - 2024. All rights reserved.