排序 Map<DateTime, double> Flutter、Dart

Dom*_*321 1 sorting dart flutter

我有一个 Map<DateTime, double> 我希望使用正确的双精度值按时间对键进行排序。我怎么做?PS:我用 2 个列表分别获取 DateTime 和 double 值,其中 DateTime[1] 是 [1] 处的 double 值,依此类推。

jul*_*101 6

SplayTreeMap如果您希望映射中的键以特定方式排序,则可以使用 a :

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)
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,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)
}
Run Code Online (Sandbox Code Playgroud)

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

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)
}
Run Code Online (Sandbox Code Playgroud)