我正在尝试在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?
答案 0 :(得分:2)
如果我是你,我会回复一张地图:
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
}
答案 1 :(得分:2)
如果必须是元组,则可以将返回值声明为Product。
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)
答案 2 :(得分:1)
您可以考虑使用HLists代替Miles Sabin的Shapeless库。他们还支持转化to and from tuples。