如何使用飞镖对列表进行排序?

时间:2020-04-29 17:08:17

标签: sorting flutter dart

我有类似list = ['1','5','10','25','50','100','250'];

的列表

我对列表进行排序,例如list..sort((a, b) => a.compareTo(b);

但是返回

1-10-100-25-250-5-50

我该如何排序返回

1-5-10-25-50-100-250

2 个答案:

答案 0 :(得分:2)

您必须先将String列表转换为int列表,然后才能对其进行排序。

List<String> list = ['1', '5', '10', '25', '50', '100', '250'];
List<int> lint = list.map(int.parse).toList();
lint.sort();
print(lint);

答案 1 :(得分:1)

原因是您的数字表示为String对象,因此按字母顺序而不是按值顺序排序。为此,我们需要在比较值之前将每个String对象转换为int对象。

前面提到的解决方案有效,但是您将获得int对象的列表,因为它在排序之前先将List<String>转换为List<int>

如果您不想这样做,可以执行以下操作以保持数字的原始表示形式:

void main() {
  final list = ['1', '5', '10', '25', '50', '100', '250'];
  list.sort((a, b) => int.parse(a).compareTo(int.parse(b)));
  print(list); // [1, 5, 10, 25, 50, 100, 250]
}

如果列表很长,则使用其他提到的解决方案会更有效,并在排序后将List<int>转换回List<String>

void main() {
  List<String> list = ['1', '5', '10', '25', '50', '100', '250'];
  List<int> lint = list.map(int.parse).toList();
  lint.sort();
  list = lint.map((i) => i.toString()).toList();
  print(list); // [1, 5, 10, 25, 50, 100, 250]
}