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
    }
}

我应该如何定义函数计算?

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

您可以考虑使用来自 Miles Sabin 的Shapeless库的HLists 。它们还支持与元组之间的转换。

于 2012-07-14T19:37:36.293 回答