按字母顺序排序列表

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】:

&lt;&gt; 通常是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]

【讨论】:

以上是关于按字母顺序排序列表的主要内容,如果未能解决你的问题,请参考以下文章

Python数据结构按字母顺序排序列表

在Android中按字母顺序排序文件列表,文件夹然后文件

VBA Access - 按字母顺序排序列表框

如何按字母顺序对项目进行排序?

根据子列表中的第二个元素按字母顺序对列表进行排序,但不区分大小写[重复]

Jquery按字母顺序排序列表