【问题标题】:Sort Map<DateTime, double> Flutter, Dart排序 Map<DateTime, double> Flutter, Dart
【发布时间】:2021-06-03 03:04:08
【问题描述】:

我得到了一个 Map 我希望使用正确的 double 值按时间对键进行排序。 我怎么做? PS: 我使用 2 个列表分别获得 DateTime 和 double 值,其中 DateTime[1] 是 [1] 处的 double 等等。

【问题讨论】:

    标签: flutter sorting dart


    【解决方案1】:

    如果您希望地图中的键以特定方式排序,您可以为此使用SplayTreeMap

    import 'dart:collection';
    
    void main() {
      final sortedMap = SplayTreeMap<DateTime, double>();
    
      sortedMap[DateTime(2021, 1, 1)] = 1.0;
      sortedMap[DateTime(2021, 1, 3)] = 3.0;
      sortedMap[DateTime(2021, 1, 4)] = 4.0;
      sortedMap[DateTime(2021, 1, 2)] = 2.0;
      sortedMap[DateTime(2021, 1, 5)] = 5.0;
    
      sortedMap.entries.forEach(print);
      // MapEntry(2021-01-01 00:00:00.000: 1.0)
      // MapEntry(2021-01-02 00:00:00.000: 2.0)
      // MapEntry(2021-01-03 00:00:00.000: 3.0)
      // MapEntry(2021-01-04 00:00:00.000: 4.0)
      // MapEntry(2021-01-05 00:00:00.000: 5.0)
    }
    

    默认情况下,如果键可比较,它会使用compareTo 方法。您也可以像这样提供自己的比较方法,例如想改变排序的顺序:

    import 'dart:collection';
    
    void main() {
      final sortedMap = SplayTreeMap<DateTime, double>((a, b) => b.compareTo(a));
    
      sortedMap[DateTime(2021, 1, 1)] = 1.0;
      sortedMap[DateTime(2021, 1, 3)] = 3.0;
      sortedMap[DateTime(2021, 1, 4)] = 4.0;
      sortedMap[DateTime(2021, 1, 2)] = 2.0;
      sortedMap[DateTime(2021, 1, 5)] = 5.0;
    
      sortedMap.entries.forEach(print);
      // MapEntry(2021-01-01 00:00:00.000: 1.0)
      // MapEntry(2021-01-02 00:00:00.000: 2.0)
      // MapEntry(2021-01-03 00:00:00.000: 3.0)
      // MapEntry(2021-01-04 00:00:00.000: 4.0)
      // MapEntry(2021-01-05 00:00:00.000: 5.0)
    }
    

    如果您还可以从另一个Map 创建一个SplayTreeMap

    import 'dart:collection';
    
    void main() {
      final inputMap = {
        DateTime(2021, 1, 1): 1.0,
        DateTime(2021, 1, 3): 3.0,
        DateTime(2021, 1, 4): 4.0,
        DateTime(2021, 1, 2): 2.0,
        DateTime(2021, 1, 5): 5.0,
      };
    
      final sortedMapA = SplayTreeMap<DateTime, double>.from(inputMap);
      final sortedMapB = SplayTreeMap<DateTime, double>.from(inputMap, (a, b) => b.compareTo(a));
    
      sortedMapA.entries.forEach(print);
      // MapEntry(2021-01-01 00:00:00.000: 1.0)
      // MapEntry(2021-01-02 00:00:00.000: 2.0)
      // MapEntry(2021-01-03 00:00:00.000: 3.0)
      // MapEntry(2021-01-04 00:00:00.000: 4.0)
      // MapEntry(2021-01-05 00:00:00.000: 5.0)
    
      sortedMapB.entries.forEach(print);
      // MapEntry(2021-01-05 00:00:00.000: 5.0)
      // MapEntry(2021-01-04 00:00:00.000: 4.0)
      // MapEntry(2021-01-03 00:00:00.000: 3.0)
      // MapEntry(2021-01-02 00:00:00.000: 2.0)
      // MapEntry(2021-01-01 00:00:00.000: 1.0)
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2014-02-05
      • 2020-05-05
      • 2020-12-18
      • 2020-12-18
      • 2020-08-28
      • 2023-01-27
      • 2020-10-07
      • 2020-11-05
      相关资源
      最近更新 更多