gpt4 book ai didi

Scala sortBy缺少扩展函数的参数类型

转载 作者:行者123 更新时间:2023-12-01 00:18:24 24 4
gpt4 key购买 nike

我已经创建了一个这样的列表列表,我可以轻松地按大小对其进行排序。

@ List(List(2, 2, 3), List(7)).sortBy(_.size)
res71: List[List[Int]] = List(List(7), List(2, 2, 3))

但是,如果我有重复的列表并且我想消除重复项,我可以做
@ List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet.toList
res72: List[List[Int]] = List(List(2, 2, 3), List(7))

可以看到上面列表的数据类型还是List[List[Int]]

现在如果我尝试
@ List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet.toList.sortBy(_.size)
cmd73.sc:1: missing parameter type for expanded function ((x$2: <error>) => x$2.size)
val res73 = List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet.toList.sortBy(_.size)
^
Compilation Failed

我也试过
@ List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet.toList.sortBy(x => x.size)
cmd73.sc:1: missing parameter type
val res73 = List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet.toList.sortBy(x => x.size)
^
Compilation Failed

我有点困惑。我手动构建的 List[List[Int]] 与从 toList 函数返回的 List[List[Int]] 之间有什么区别?为什么我可以打电话 sortBy在第一个上,但我不能在第二个上调用 sortBy?

最佳答案

问题来自 toSet 的定义:

def toSet[B >: A]: Set[B]

如您所见,有一个类型参数需要推断。 Scala 仍然可以在您的第一个示例中使用 toSet 推断出这一点,但涉及 lambda 的那个具有更复杂的类型推断,Scala 显然无法处理。您可以通过为 lambda 提供参数类型或更简单地为 toSet 提供类型参数来解决此问题。 :
List(List(2, 2, 3), List(3, 2, 2), List(7)).map(_.sorted).toSet[List[Int]].toList
.sortBy(_.size)

prayagupd points out ,您也可以使用 .distinct .

关于Scala sortBy缺少扩展函数的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com