按字母顺序排序列表
Posted
技术标签:
【中文标题】按字母顺序排序列表【英文标题】:Sort List by alphabetical order 【发布时间】:2018-09-15 10:26:28 【问题描述】:我正在尝试按字母顺序对列表进行排序,并尝试将我在 javascript 中的内容移植到颤动。但它给了我一个关于字符串的例外,它没有实例方法'
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 '<'.
【问题讨论】:
【参考方案1】:<
和>
通常是compareTo
方法的快捷方式。
改用那个方法。
data.sort((a, b)
return a['name'].toLowerCase().compareTo(b['name'].toLowerCase());
);
【讨论】:
【参考方案2】:我发现按字母顺序对列表进行排序的最佳方法是:
List.sort((a, b) => a.toString().compareTo(b.toString()));
【讨论】:
【参考方案3】:感谢 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());
;
SortF number = (String sortField) => (a, b)
return a[sortField].compareTo(b[sortField]);
;
有了这个你就可以写了。
list.sort(alphabetic('name')); //replace name with field name
list.sort(number('name')); //replace name with field name
【讨论】:
【参考方案4】:List.sort((a, b) => a.toString().compareTo(b.toString()));
上面的代码代码有效,但是如果你使用上面的代码,它会先显示大写字母。这就是为什么您必须在排序扩展中将它们全部转换为小写。
List.sort((a, b) => a.toLowerCase().compareTo(b.toLowerCase()));
【讨论】:
【参考方案5】:迟到的答案,我有类似的情况,这是我解决它的方法
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);
【讨论】:
【参考方案6】:void main()
List users = [
"name": "Abhishek",
"age": 21,
,
"name": "Raj",
"age": 22,
,
"name": "Rajesh",
"age": 23,
,
"name": "Aakash",
"age": 24,
];
users.sort((a, b) => a["name"].compareTo(b["name"]));
print(users);
输出:
[name: Aakash, age: 24, name: Abhishek, age: 21, name: Raj, age: 22, name: Rajesh, age: 23]
【讨论】:
以上是关于按字母顺序排序列表的主要内容,如果未能解决你的问题,请参考以下文章