首页 > 解决方案 > 如何在 Dart 中对这个数组/映射进行排序?

问题描述

如何从 Dart 中的“数据”中对该地图/数组进行排序?

var training = [
  {"data" : "15/10/2019" , "pic" : "assets/images/foto3.jpg"},
  {"data" : "10/10/2019" , "pic" : "assets/images/foto5.jpg"},
  {"data" : "15/10/2019" , "pic" : "assets/images/foto4.jpg"},
  {"data" : "30/10/2019" , "pic" : "assets/images/bocateam.jpg"},
  {"data" : "17/10/2019" , "pic" : "assets/images/foto2.jpg"},
];

标签: arraysdictionarydart

解决方案


我不确定您要对什么进行排序,但我猜它是“数据”值中的日期。请看一下这个实现,如果有什么你不明白的,请告诉我:

void main() {
  final training = [
    {"data": "15/10/2019", "pic": "assets/images/foto3.jpg"},
    {"data": "10/10/2019", "pic": "assets/images/foto5.jpg"},
    {"data": "15/10/2019", "pic": "assets/images/foto4.jpg"},
    {"data": "30/10/2019", "pic": "assets/images/bocateam.jpg"},
    {"data": "17/10/2019", "pic": "assets/images/foto2.jpg"},
  ];

  training.sort((map1, map2) {
    final date1 = parseDate(map1['data']);
    final date2 = parseDate(map2['data']);
    return date1.compareTo(date2);
  });

  training.forEach(print);
  //  {data: 10/10/2019, pic: assets/images/foto5.jpg}
  //  {data: 15/10/2019, pic: assets/images/foto3.jpg}
  //  {data: 15/10/2019, pic: assets/images/foto4.jpg}
  //  {data: 17/10/2019, pic: assets/images/foto2.jpg}
  //  {data: 30/10/2019, pic: assets/images/bocateam.jpg}
}

// Format: 15/10/2019
DateTime parseDate(String date) {
  final parts = date.split('/');
  return DateTime(
      int.parse(parts[2]), int.parse(parts[1]), int.parse(parts[0]));
}

如果首先将每个日期转换为DateTime对象,则实现可能会更有效,因此我们在排序时不需要多次转换每个对象。但如果列表很短,这不是一个大问题。


推荐阅读