gpt4 book ai didi

scala - 如何在 Scala 中解构字符串长度(降序)的排序方法?

转载 作者:行者123 更新时间:2023-12-02 06:12:54 24 4
gpt4 key购买 nike

我遇到了这段代码,它按长度降序对字符串集合进行排序:

words.sortBy(x => -x.length)

有人可以帮助我理解 x 前面的 - 的用途是什么,并逐段解构这段代码吗?它代表“反向”操作吗?我知道这是整数运算,但我很难弄清楚算法在后台如何工作。这也可以被视为冒泡排序吗?

最佳答案

如果你有:

val collection: SomeCollection[A]
val keyToSortBy A => B

当你这样做时:

collection.sortBy(keyToSortBy)

发生的情况是,Scala 将在其隐式作用域中查找 Ordering[B](如果您还不熟悉隐式,请阅读有关隐式的内容),并且它将使用此接口(interface)提供的方法通过排序算法比较元素。

sortBy 将使用 Ordering[X] 按升序对内容进行排序(如果您了解 Java,请考虑 Comparator)。对于Ordering[Int],它只是整数的递增顺序,对于Ordering[String],您有Strings的词汇顺序。

- 在这里所做的是获取该值,然后将其传递给按 Int 排序的算法并取反。如果你看一些例子会更容易:

List("a", "bb", "ccc").sortBy(word => word.length)
// imagine that what it does is:
// - building a collection of pairs ("a", 1), ("bb", 2), ("ccc", 3)
// ( (value from collection, what function returned for that value) )
// - sorting by the second element of pair
// using normal Int comparison to get ascending result
// - take only the first element of each pair: ("a", 1), ("bb", 2), ("ccc", 3)
List("a", "bb", "ccc") // result

如果我们将 - 放在那里,Ordering 将得到不同的结果:

List("a", "bb", "ccc").sortBy(word => -word.length)
// - building a collection of pairs ("a", -1), ("bb", -2), ("ccc", -3)
// - sorting by the second element of pair - notice that all are negative now!!!
// using normal Int comparison to get ascending result
// - take only the first element of each pair: ("ccc", -3), ("bb", -2), ("a", -1)
List("ccc", "bb", "a") // result

关于scala - 如何在 Scala 中解构字符串长度(降序)的排序方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60973686/

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