我是Scala的新手,我正在尝试创建一个函数来计算某个对象在序列中出现的数量。在这个例子中,我们有一个序列,其中有1个Hippo和3个Tigers。我想知道序列中Tigers的数量。所以函数amountOfTigers的结果应该是一个整数:3.我想利用模式匹配和递归来解决这个问题,但我真的不知道怎么做。
sealed trait Animal
case class Hippo(name: String, age: Int) extends Animal
case class Tiger(name: String, age: Int) extends Animal
def amountOfTigers(animals: Seq[Animal]): Int = animals match {
case head +: tail => if (head.isInstanceOf[Tiger]) println(head); amountOfTigers(tail)
}
val data = Seq[Animal](
Hippo("Mino", 4),
Tiger("Justin", 1),
Tiger("Jason", 20),
Tiger("Sloop", 10)
)
amountOfTigers(data)
println用于测试目的。我现在得到的输出是:老虎(贾斯汀,1)老虎(杰森,20)老虎(单桅帆船,10)
我想知道一个序列中老虎的数量,在这个例子中是3。
2条答案
按热度按时间s6fujrry1#
如果你想避免递归(我个人建议在这种情况下--因为它只是一个普通的数据数组),我建议你使用一个循环,如下所示:
如果你坚持使用递归,我建议使用
@tailrec
,就像Christian暗示的那样:gstyhher2#
这是一个例子:
您可能想要查看的内容: