首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >以相同的方式对两个列表进行排序

以相同的方式对两个列表进行排序
EN

Stack Overflow用户
提问于 2021-02-25 20:26:37
回答 4查看 46关注 0票数 0

我需要从最早到最晚对DateTime列表进行排序。

代码语言:javascript
运行
AI代码解释
复制
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();

我有另一个字符串列表。

代码语言:javascript
运行
AI代码解释
复制
List list = ["one", "two", "three"];

stringList的索引必须与datetimeList的索引匹配。因此,“1”的索引必须始终与索引2021-01-15 12:26:40.709246相同,依此类推。

如果我单独对列表进行排序,则DateTime将按DateTime排序,而String将按字母顺序排序。这样,字符串将不再与其初始日期一起使用。

如何以完全相同的方式对一个列表(datetimeList)和另一个列表(stringList)进行排序?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-02-25 20:34:49

最简单的解决方案是创建一个结构/类来组合这两个变量,这样您就不必担心保持数组中的对象对齐。您需要做的最后一件事是按日期对新对象的数组进行排序。因此,由于缺少有关Dart的知识,我无法帮助您。

票数 3
EN

Stack Overflow用户

发布于 2021-02-26 04:06:47

你也可以给我们一个SplayTreeMap。

https://api.dart.dev/stable/2.8.4/dart-collection/SplayTreeMap-class.html.SplayTreeMap确保它的键是有序的,order.You可以使用你的datetime作为键,使用其他列表的内容作为值。

代码语言:javascript
运行
AI代码解释
复制
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]}");
  }
}
票数 0
EN

Stack Overflow用户

发布于 2021-02-26 08:44:05

我推荐这里给出的更简单的建议。

为了完整性,我将提供另一种方法:通过对索引列表进行排序来计算排列:

代码语言:javascript
运行
AI代码解释
复制
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]));

然后,您可以对现有列表进行重新排序以匹配:

代码语言:javascript
运行
AI代码解释
复制
List reorder(List elements, List permutation) =>
  [for (var i = 0; i < permutation.length; i++) elements[permutation[i]]];

如果您这样做了:

代码语言:javascript
运行
AI代码解释
复制
var sorted = reorder(original, sortedPermutation(original, compare));

它应该会给你一个排序的列表。

它的效率低于就地排序,因为您创建了一个新列表,但您可以在以后对多个列表应用相同的重新排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66375976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档