【问题标题】:How to sort a list of unordered values in dart?如何对飞镖中的无序值列表进行排序?
【发布时间】:2022-01-19 07:18:09
【问题描述】:

以下是我尝试过但无法获得预期结果的程序,

void main() {
  List data = ['Jan-21','Feb-21','Aug-21','Jan-22','Jun-21','Sept-22','Mar-21','Apr-22'];
  data.sort((a,b){
    return a.compareTo(b);
  });
  print(data.toString());
  //output - [Apr-22, Aug-21, Feb-21, Jan-21, Jan-22, Jun-21, Mar-21, Sept-22]
  //expected - [Jan-21, Feb-21, Mar-21, Aug-21, Jan-22, Apr-22, Jun-21, Sept-22]
}

我需要按照它们实际出现的顺序对“月-年”数据列表进行排序,

对于这个列表[Jan-21,Feb-21,Aug-21,Jan-22,Jun-21,Sept-22,Mar-21,Apr-22]

预期的输出是[Jan-21, Feb-21, Mar-21, Aug-21, Jan-22, Apr-22, Jun-21, Sept-22]

【问题讨论】:

    标签: algorithm flutter sorting dart


    【解决方案1】:

    你可以通过重写sort函数直接排序,按日期时间排序。

     DateFormat formatter = DateFormat("MMM-yy");
     data.sort((a, b) => formatter.parse(a)
           .compareTo(formatter.parse(b)));
    

    【讨论】:

      【解决方案2】:

      您必须转换为日期并使用intl,然后才能对其进行排序

      注意:您已设置月份名称长度以防止出现模式问题

      君 => 嗯

      九月 => MMMM

          void main() {
        List data = [
          'Jan-21',
          'Feb-21',
          'Aug-21',
          'Jan-22',
          'Jun-21',
      //     'Sept-22', // you have set month name length same to prevent the pattern problem
          'Mar-21',
          'Apr-22'
        ];
        data.sort((a, b) {
          var formattedDateA = intl.DateFormat("MMM-yy").parse(a);
          var formattedDateB = intl.DateFormat("MMM-yy").parse(b);
          
          return formattedDateA.compareTo(formattedDateB);
        });
        print(data.toString());
        //output - [Jan-21, Feb-21, Mar-21, Jun-21, Aug-21, Jan-22, Apr-22]
      }
      

      【讨论】:

        【解决方案3】:
        List<String> getSortedDates(List<String> dates){
        
          //Formatting for acceptable DateTime format
          DateFormat formatter = DateFormat("MMM-yy");
        
          //Mapping to convert into appropriate dateFormat
          List<DateTime> _formattedDates = dates.map(formatter.parse).toList();
        
          //Apply sort function on formatted dates
          _formattedDates.sort();
        
          //Mapping through sorted dates to return a List<String> with same formatting as passed List's elements
          return _formattedDates.map(formatter.format).toList();
        
        }
        

        【讨论】:

        • 如果这是您的解决方案,则标记为答案
        猜你喜欢
        • 2019-11-21
        • 2021-10-07
        • 1970-01-01
        • 2019-07-17
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 2018-11-06
        • 2021-11-18
        相关资源
        最近更新 更多