颤振镖分选方法无效


var dataJson = response.body;
dataJson = dataJson.replaceAll('[', '');
dataJson = dataJson.replaceAll(']', '');
dataJson = dataJson.replaceAll('"', '');
var matchData = dataJson.split(',').toList();
//matchData.sort((a, b) => a.compareTo(b)); I tested this too
matchData.sort();

dataJson =[KR_1, KR_3, KR_4, KR_2, KR_7, KR_6, KR_5]

我想这样排序列表:

[KR_1, KR_2, KR_3, KR_4, KR_5, KR_6, KR_7].

您的代码的问题是,给定String'["KR_1", "KR_3", "KR_4", "KR_2", "KR_7", "KR_6", "KR_5"]'(其中,给定您的代码,我认为是您真正拥有的),删除括号和引号后,当您执行dataJson.split(',')时,所产生的List的元素仍将包括空格。一些元素开头的空格是导致您得到意外排序顺序的原因。

(顺便说一下,String.split已经返回了一个List<String>,所以再次调用.toList()是不必要的和浪费的。)

您可以通过使用dataJson.split(', ')来删除空格,或者在每个元素上显式调用String.trim。但是你不应该自己解析JSON:

import 'dart:convert';
void main() {
var dataJson = '["KR_1", "KR_3", "KR_4", "KR_2", "KR_7", "KR_6", "KR_5"]';
var matchData = json.decode(dataJson);
matchData..sort();
print(matchData); // Prints: [KR_1, KR_2, KR_3, KR_4, KR_5, KR_6, KR_7]
}

请注意,上面的字符串按字典顺序(即按字符代码顺序)排序,因此"KR_10"将排在"KR_2"之前。如果您不希望这样,那么请参阅:是否有一种方法可以按字符串内部的数字对字符串列表进行排序?

try this;

final dataJson = ["KR_1", "KR_3", "KR_4", "KR_2", "KR_7", "KR_6", "KR_5"];
final data = dataJson.toList()..sort((a,b)=> a.compareTo(b));
log(data.toString()); // or use print

结果//

[KR_1, KR_2, KR_3, KR_4, KR_5, KR_6, KR_7]

最新更新