Dart:按列表长度在列表列表中排序

时间:2020-04-29 02:35:42

标签: dart

我想要一个带有列表列表的函数。不管列表的类型如何,都应按列表中每个列表的长度对其进行排序。

我以为可以使用下面的函数来实现此目的,但是我遇到了类型错误。 X is not a subtype of Y。据我了解,使用dynamic意味着它可以采用任何类型,那么我在做什么错呢?

List<List<dynamic>> sortByLength(List<List<dynamic>> lss) {
  final newLss = List.from(lss);

  return newLss..sort((a, b) => a.length.compareTo(b.length));
}

1 个答案:

答案 0 :(得分:1)

您的问题是,您不小心将List<List<dynamic>>转换为List<dynamic>,然后试图将其作为List<List<dynamic>>返回而没有强制转换。

final newLss = List.from(lss);

这会导致两个错误:

  1. 它使用List.from instead of List.of(或代替lss.toList()[...lss])。
  2. 它没有为List指定显式类型。

这些错误结合在一起,使newLss的类型为List<dynamic>。然后尝试返回newLss失败,因为将List<dynamic>转换为List<T>需要使用List.cast来更改元素类型。