繁体   English   中英

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

[英]How can i sort list with 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

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

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

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

前面提到的解决方案有效,但您最终会得到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]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM