我有类似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
答案 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]
}