Dom*_*321 1 sorting dart flutter
我有一个 Map<DateTime, double> 我希望使用正确的双精度值按时间对键进行排序。我怎么做?PS:我用 2 个列表分别获取 DateTime 和 double 值,其中 DateTime[1] 是 [1] 处的 double 值,依此类推。
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)
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |