排序地图<日期时间、双精度>颤振、飞镖



我得到了Map<DateTime,>我想让键按时间排序,有正确的双精度值。我怎么做呢?PS:我用两个列表分别获得DateTime和double值,其中DateTime[1]是[1]的double值,以此类推。

如果您希望映射中的键以特定的方式排序,则可以使用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)
}

最新更新