问题:
- 随机生成长度为100取值范围随机500以内的整数,求峰值和谷值
- 相邻的三个数中间最大为峰值,中间最小为谷值
思路:首先新建随机数数组
- 方法1:普通循环判断
- 方法2:sliding+groupBy(模式匹配)+map
- 方法3:sliding返回迭代器后,在每个数组里使用collect
import scala.util.Random
object TestMethod {
def main(args: Array[String]): Unit = {
import scala.collection.mutable._
val buffer = new ArrayBuffer[Int]
for (i<- 1 to 100){
buffer.append(Random.nextInt(500))
}
var arr = buffer.toArray
for(i<- 1 until arr.length-1){
if (arr(i)>arr(i-1)&arr(i)>arr(i+1)){
println(s"峰值为:${arr(i)}")
}
if (arr(i)<arr(i-1)&arr(i)<arr(i+1)){
println(s"谷值为:${arr(i)}")
}
}
arr.sliding(3,1).toArray.groupBy(x => x match {
case i if (x.max==x(1)) => "峰值"
case i if (x.min==x(1)) => "谷值"
case _=>"其他"
}).map(x => (x._1, x._2.map(_ (1))))
.foreach(x=>println(s"${x._1}:${x._2.mkString("-")}"))
arr.sliding(3).foreach(x=>x.collect({
case i if(x(1)==i&x(1)>x(0)&x(1)>x(2))=>println(s"${i}峰值")
case i if(x(1)==i&x(1)<x(0)&x(1)<x(2))=>println(s"${i}谷值")
case _=>""
}))
}
}