0
def sort(s:String)={
   val a= s.toCharArray ()
   scala.util.Sorting.quickSort(array)
   new String(a)
}
  1. 是否有更简洁的方法来编写上述内容 - 同时保持对 QuickSort 的调用?
  2. 为什么快速排序会改变数组而不是返回一个新数组(这不是函数式语言应该做的吗?)
4

1 回答 1

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

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

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

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

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

scala> "BCAD".sorted
res5: String = ABCD
于 2013-07-04T19:14:00.470 回答