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. 並べ替え方法に問題はありません。インプレース クイックソートが必要な場合は、おそらくこれが最適です。

  2. Scala は純粋な関数型言語ではありません。関数型スタイルを使いやすいものにしようとしていますが、パフォーマンスやその他の理由で命令型スタイルを使用したい場合は、何も問題はありません。実際、関数型スタイルが可能であることに加えて、scala は Java よりもはるかに優れた OO 言語でもあります。

変更可能な状態をいつ使用するかについて、言語の作成者である Martin Odersky の講演をご覧ください。 ScalaDays 2013 基調講演

いずれにせよ、変更可能な状態がメソッドのローカル変数に限定されている限り、それは無害であり、簡単に推論できます。sort メソッドは、内部で変更可能な状態を使用していても、外部からは純粋/参照透過的です。

ところで、文字列に対して機能する不変の変換バージョンの sort が必要な場合は、それも存在します。内部で sort メソッドと同様のことを行う可能性があります。

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