【发布时间】:2021-06-03 03:04:08
【问题描述】:
我得到了一个 Map
【问题讨论】:
我得到了一个 Map
【问题讨论】:
如果您希望地图中的键以特定方式排序,您可以为此使用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)
}
【讨论】: