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

时间:2012-10-15 01:29:10

标签: string list sorting dart

我在API文档中看到sort()上有List方法,但我不清楚参数需要什么。目前的需求是进行非常简单的直接α比较。

8 个答案:

答案 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&lt; b,结果应该是&lt; 0,
  • 如果a = b,结果应为= 0和
  • 如果a&gt; b,结果应该是> 0

对于上述三分法,ab必须为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"]));