【问题标题】: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 '<'.

【问题讨论】:

    标签: flutter


    【解决方案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}]
              

              【讨论】:

                最近更新 更多