按字母顺序对列表进行排序

时间:2018-04-05 14:37:07

标签: flutter

我试图按字母顺序对列表进行排序,并尝试将我在javascript中移植的内容移植到其中。但它给了我一个关于String的例外,它没有实例方法'<'。我希望有人可以帮我解决这个问题。因为我不知道如何纠正这个问题。

data.sort((a, b) {
            var aName = a['name'].toLowerCase();
            var bName = b['name'].toLowerCase();
            return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
        });

我得到了这个例外:

E/flutter (16823): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (16823): NoSuchMethodError: Class 'String' has no instance method '<'.

4 个答案:

答案 0 :(得分:10)

<>通常是compareTo方法的快捷方式。

只需使用该方法。

data.sort((a, b) {
  return a['name'].toLowerCase().compareTo(b['name'].toLowerCase());
});

答案 1 :(得分:1)

我发现按字母顺序对列表进行排序的最佳方法是:

      List.sort((a, b) => a.toString().compareTo(b.toString()));

答案 2 :(得分:0)

由于Remi的回答,我将其提取为一个函数。

typedef Sort = int Function(dynamic a, dynamic b);
typedef SortF = Sort Function(String sortField);

SortF alphabetic = (String sortField) => (a, b){
  return a[sortField].toLowerCase().compareTo(b[sortField].toLowerCase());
};

您可以用它来写。

list.sort(alphabetic('name')); //replace name with field name

答案 3 :(得分:0)

迟来的答案,我遇到了类似的情况,这就是我的解决方法

     String a = 'towNnpBiDHRehMh4FhYAYShVFr62';
  String b = 'Yjeq9bA0spdZGmqlbr4J663LyvC3';
  String c = "RdeQo32uUwX3ftBeGm0nFChkzE52";
//if you try to sort the strings without converting them toLowercase ir uppercase you will get different results.
  List<String> _myBranchListName = [
    a.toLowerCase(),
    b.toLowerCase(),
    c.toLowerCase(),
  ];

  _myBranchListName.sort();
//if you want to add to strings from the result
  var userId = "${_myBranchListName[0]}" + "${_myBranchListName[1]}";
  print(userId);

  print(_myBranchListName);
相关问题