【问题标题】:Idiomatic use of QuickSort in ScalaScala 中快速排序的惯用用法
【发布时间】:2013-07-04 19:02:21
【问题描述】:
def sort(s:String)={
   val a= s.toCharArray ()
   scala.util.Sorting.quickSort(array)
   new String(a)
}
  1. 是否有更简洁的方式来编写上述内容 - 同时保持对 QuickSort 的调用?
  2. 为什么快速排序会改变数组而不是返回一个新数组(这不是函数式语言应该做的吗?)

【问题讨论】:

  • Scala 将 JVM 数组用于其 Array 类型。因此,它们是可变的。鉴于此,提供就地(变异)排序和 Rüdiger 提到的 sorted 方法是有意义的。但我想问的是你在你的例子中要多加注意。显然它不会编译(它是String,而不是string)并且没有名为scala.until 的包。您的格式也很随意...

标签: scala


【解决方案1】:
  1. 我认为排序方法没有任何问题。如果您想要就地快速排序,这可能是您将获得的最佳选择。

  2. Scala 不是纯函数式语言。它试图使函数式风格易于使用,但如果您想出于性能或其他原因使用命令式风格,那么它没有任何问题。事实上,除了允许函数式风格,scala 也是一种比 java 更好的 OO 语言。

请参阅该语言的创建者 Martin Odersky 关于何时使用可变状态的演讲。 ScalaDays 2013 Keynote

无论如何,只要可变状态仅限于方法的局部变量,它是非常无害且易于推理的。 sort 方法对外部来说是纯粹的/引用透明的,即使它在内部使用可变状态。

顺便说一句:如果您想要一个适用于字符串的不可变转换版本的排序,它也存在。它可能在内部执行类似于您的排序方法的操作。

scala> "BCAD".sorted
res5: String = ABCD

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2016-05-05
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多