簡體   English   中英

如何對 dart 中的無序值列表進行排序?

[英]How to sort a list of unordered values in dart?

以下是我嘗試但無法獲得預期結果的程序,

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]

output 預計為[Jan-21, Feb-21, Mar-21, Aug-21, Jan-22, Apr-22, Jun-21, Sept-22]

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();

}

您可以通過覆蓋排序 function 以按日期時間排序來直接排序。

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

您必須轉換為日期並使用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]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM