代码之家  ›  专栏  ›  技术社区  ›  장인수

颤振镖排序方法不起作用

  •  0
  • 장인수  · 技术社区  · 1 年前
    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\u 1、KR\u 3、KR\u 4、KR\u 2、KR\u 7、KR\u 6、KR\u 5]

    我想对列表进行如下排序:
    [KR\u 1、KR\u 2、KR\u 3、KR\u 4、KR\u 5、KR\u 6、KR\u 7]

    谢谢

    1 回复  |  直到 1 年前
        1
  •  0
  •   jamesdlin    1 年前

    代码的问题在于 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" . 如果您不想这样,请参见: Is there a way to sort string lists by numbers inside of the strings?

        2
  •  -1
  •   Arbiter Chil    1 年前

    试试这个;

    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]