我需要从最早到最晚对DateTime列表进行排序。
List list = [2021-01-15 12:26:40.709246, 2021-02-25 13:26:40.709246, 2021-02-20 19:26:40.709246];
datetimeList.sort();
我有另一个字符串列表。
List list = ["one", "two", "three"];
stringList的索引必须与datetimeList的索引匹配。因此,“1”的索引必须始终与索引2021-01-15 12:26:40.709246相同,依此类推。
如果我单独对列表进行排序,则DateTime将按DateTime排序,而String将按字母顺序排序。这样,字符串将不再与其初始日期一起使用。
如何以完全相同的方式对一个列表(datetimeList)和另一个列表(stringList)进行排序?
发布于 2021-02-25 20:34:49
最简单的解决方案是创建一个结构/类来组合这两个变量,这样您就不必担心保持数组中的对象对齐。您需要做的最后一件事是按日期对新对象的数组进行排序。因此,由于缺少有关Dart的知识,我无法帮助您。
发布于 2021-02-26 04:06:47
你也可以给我们一个SplayTreeMap。
https://api.dart.dev/stable/2.8.4/dart-collection/SplayTreeMap-class.html.SplayTreeMap确保它的键是有序的,order.You可以使用你的datetime作为键,使用其他列表的内容作为值。
main() {
final SplayTreeMap map =
new SplayTreeMap();
map[DateTime.parse("2021-01-15 12:26:40.709246")] = "one";
map[DateTime.parse("2021-02-25 13:26:40.709246")] = "three";
map[DateTime.parse("2021-02-20 19:26:40.709246")] = "two";
for (final DateTime key in map.keys) {
print("$key : ${map[key]}");
}
}
发布于 2021-02-26 08:44:05
我推荐这里给出的更简单的建议。
为了完整性,我将提供另一种方法:通过对索引列表进行排序来计算排列:
List sortedPermutation(List elements, int compare(T a, T b)) =>
[for (var i = 0; i < elements.length; i++) i]
..sort((i, j) => compare(elements[i], elements[j]));
然后,您可以对现有列表进行重新排序以匹配:
List reorder(List elements, List permutation) =>
[for (var i = 0; i < permutation.length; i++) elements[permutation[i]]];
如果您这样做了:
var sorted = reorder(original, sortedPermutation(original, compare));
它应该会给你一个排序的列表。
它的效率低于就地排序,因为您创建了一个新列表,但您可以在以后对多个列表应用相同的重新排序。
https://stackoverflow.com/questions/66375976
复制相似问题