gpt4 book ai didi

Scala 列表方法 : `remove` and `sort`

转载 作者:行者123 更新时间:2023-12-03 02:52:04 25 4
gpt4 key购买 nike

我正在学习“Scala 编程(第一版)”,并且已经掌握了一些 List 方法。它命名的两个方法在交互式 shell 中给我一个错误:删除和排序。以下是它给出的示例:

val thrill = "will" :: "fill" :: "until" :: Nil

thrill.sort((a, b) a.charAt(0).toLowerCase < b.charAt(0).toLowerCase)

thrill.remove(s => s.length == 4)

当我在控制台中尝试这些方法时,我收到错误,这些方法不是“List[String]的成员”:

scala> util.Properties.versionString
res41: String = version 2.11.1

scala> val myList = "one" :: "two" :: "three" :: "four" :: Nil
myList: List[String] = List(one, two, three, four)

scala> myList.sort((a, b) => a.charAt(0).toLowerCase < b.charAt(0).toLowerCase)
<console>:9: error: value sort is not a member of List[String]
myList.sort((a, b) => a.charAt(0).toLowerCase < b.charAt(0).toLowerCase)
^

scala> thrill.remove(s => s.length == 5)
<console>:9: error: value remove is not a member of List[String]
thrill.remove(s => s.length == 5)

所以我想也许我正在使用更新的版本(因为这本书似乎是几年前写的),我查阅了 List documentation 。这两种方法似乎都存在于 2.7.7 版本中(我能找到的最新版本)。如您所见,我运行的是 2.11.1。

这些方法是否自 2.7.7 起就从 List API 中删除了,还是我使用错误了?

最佳答案

在 scala 2.7 的黑暗时期(四年多前了!),你的代码可以正常工作,但现在,在 2.8+ 中,你必须为 remove 使用不同的名称>排序:

import Character.{toLowerCase => lower}
myList.sortWith { case (a, b) => lower(a.charAt(0)) < lower(b.charAt(0)) }
// List(four, one, two, three)

还有.sorted用于默认排序

List(2, 5, 3).sorted
// res10: List[Int] = List(2, 3, 5)

和 .sortBy(x => ...) 通过一些准备进行排序(就像用临时 map 排序):

val foo = List("ac", "aa", "ab")
foo.sortBy(x => x.charAt(1))
// res6: List[String] = List(aa, ab, ac)

并且remove被替换为filterNot(不过,我认为remove是更方便的名称,即使它让你认为集合是可变的,这是Ven在他的回答中欺骗的):

thrill.filterNot(s => s.length == 5)
// res9: List[String] = List(will, fill)

还有 .filter,其作用相反:

thrill.filter(s => s.length == 5)
// res11: List[String] = List(until)

它在 scala 代码中更为常见。

关于Scala 列表方法 : `remove` and `sort` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246625/

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