在Scala中惯用法使用QuickSort

时间:2013-07-04 19:02:22

标签: scala

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

1 个答案:

答案 0 :(得分:4)

  1. 我没有看到sort方法有什么问题。如果你想要一个就地快速配送,这可能是你将获得的最好的。

  2. Scala不是纯粹的功能语言。它试图使功能风格使用愉快,但如果你想使用命令式的性能或其他原因,它没有任何问题。事实上,除了允许功能样式之外,scala也是比java更好的OO语言。

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

    在任何情况下,只要可变状态局限于方法的局部变量,它就是非常无害且容易推理的。即使在内部使用可变状态,sort方法也是纯粹/引用透明的。

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

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