5

私はScalaでパーセンタイルユーティリティを書くことを実験しています。Int可変数のパラメーターで初期化されるクラスを書くことを考えていました。たとえば、でPercentile初期化されたクラス50,95は、50パーセンタイルと95パーセンタイルを計算できることを意味します。クラスは大まかに次のようになります。

class PercentileUtil(num: Int*) {
    def collect(value: Int) {
        // Adds to a list
    }

    def compute = {
        // Returns the 50th and 95th percentiles as a tuple
    }
}

関数computeをどのように定義する必要がありますか?

4

3 に答える 3

3

タプルである必要がある場合は、戻り値を製品として宣言できます。

def compute: Product = if(...) (1,2) else ("1", "2", "3")

compute match {
    case (a: Int, b: Int) => 
    case (a: String, b: String, c: String) => 
}

compute.productIterator.foreach(println)
于 2012-07-14T10:29:48.783 に答える
3

私があなただったら地図を返します:

class PercentileUtil(percentiles: Int*) {
  private def nthPercentile[T](n: Int, xs: Seq[T]): Seq[T] = ...
  def compute[T](xs: Seq[T]) = percentiles.map(p => p -> nthPercentile(p, xs)).toMap
}
于 2012-07-13T19:16:35.677 に答える
1

MilesSabinのShapelessライブラリの代わりにHListを使用することを検討してください。また、タプルとの間の変換もサポートしています。

于 2012-07-14T19:37:36.293 に答える