繁体   English   中英

颤振飞镖排序方法不起作用

[英]flutter dart sorting method does not work

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"之前排序。 如果您不希望这样,请参阅:有没有办法按字符串内的数字对字符串列表进行排序?

尝试这个;

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]

暂无
暂无

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

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