我试图按字母顺序对列表进行排序,并尝试将我在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 '<'.
答案 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);