1

我开始学习 Scala 并且在为不耐烦的人阅读 Scala 时,得到了以下练习之一的解决方案:

//No function
def positivesThenZerosAndNegatives(values: Array[Int]) = {
    Array.concat(for (value <- values if value > 0) yield value,
        for (value <- values if value == 0) yield value,
        for (value <- values if value < 0) yield value)
}

但是现在我试图将在每个综合上应用过滤器的函数作为参数传递:

//Trying to use a function (filter)
def positivesThenZerosAndNegatives2(values: Array[Int]) = {
    Array.concat(filter(values, _ > 0), filter(values, _ == 0), filter(values, _ < 0))
}

def filter[T: Int](values: Array[T], f: (T) => Boolean) = {
    for (value <- values if f(value)) yield value
}

我还没有找到引用元素数组的正确方法。

4

1 回答 1

3

您可以filter按如下方式编写您的方法:

import scala.reflect.ClassTag

def filter[T: ClassTag](values: Array[T], f: T => Boolean): Array[T] = {
  for(value <- values; if f(value)) yield value
}

或者这样:

def filter(values: Array[Int], f: Int => Boolean): Array[Int] = {
  for(value <- values; if f(value)) yield value
}

无论如何,您可以像这样简单地重写您的方法positivesThenZerosAndNegatives

scala> def positivesThenZerosAndNegatives(values: Array[Int]) = {
     |   values.filter(0 <) ++ values.filter(0 ==) ++ values.filter(0 >)
     | }
于 2013-03-11T00:25:25.807 回答