ScalaNote20-集合练习题02

网友投稿 735 2022-10-08

ScalaNote20-集合练习题02

ScalaNote20-集合练习题02

Exercise01

编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0和n之间。

val n = 10val arr = scala.collection.mutable.ArrayBuffer[Int]()for (i <- 1 to 10){ arr.append(scala.util.Random.nextInt(n))}println(arr)

ArrayBuffer(3, 0, 3, 0, 9, 4, 1, 2, 8, 4)n: Int = 10arr: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(3, 0, 3, 0, 9, 4, 1, 2, 8, 4)

Exercise02

编写一个循环,将整数数组中相邻的元素置换。比如Array(1, 2, 3, 4, 5)置换后为Array(2, 1, 4, 3, 5)

def changeF(arr:Array[Int])={ var ass = 0for(i <- 0 until (arr.length-1,2) ){ ass = arr(i) arr(i) = arr(i+1) arr(i+1) = ass} arr}val arr = Array(1,2,3,4,5)val arr1 = Array(1,2,3,4,5,6)changeF(arr)changeF(arr1)// println("xx"+changeF(arr).mkString(","))// println(changeF(arr1))

changeF: (arr: Array[Int])Array[Int]arr: Array[Int] = Array(2, 1, 4, 3, 5)arr1: Array[Int] = Array(2, 1, 4, 3, 6, 5)res21: Array[Int] = Array(2, 1, 4, 3, 6, 5)

Exercise03

给定一个整数数组,产出一个新的数组,包含原数组中的所有正值,以原有顺序排列,之后的元素是所有零或负值,以原有顺序排列。

def splitMerge(arr:Array[Int])={ def isPostiveNumber(x:Int)={ x>0 } def isNegativeNumber(x:Int)={ x<=0 } val arr1= arr.filter(isPostiveNumber) val arr2= arr.filter(isNegativeNumber) val arr3 = scala.collection.mutable.ArrayBuffer[Int]() arr1.foreach(i=>arr3.append(i)) arr2.foreach(i=>arr3.append(i)) arr3}splitMerge(Array(1,-9,3,6,-5))

splitMerge: (arr: Array[Int])scala.collection.mutable.ArrayBuffer[Int]res27: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 3, 6, -9, -5)

Exercise04

设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后根据这个映射构建另一个新映射,采用同一组键,但是价格上打9折

val map1 = Map[String,Double](("apple",5000.0),("huawei",4000.0))map1.map(i=>(i._1,i._2*0.9))

map1: scala.collection.immutable.Map[String,Double] = Map(apple -> 5000.0, huawei -> 4000.0)res51: scala.collection.immutable.Map[String,Double] = Map(apple -> 4500.0, huawei -> 3600.0)

Exercise05

编写一个函数 minmax(values:Array[Int]), 返回数组中最小值和最大值的对偶

def minmax(arr:Array[Int])={ val maxValue = arr.max val minValue = arr.min (minValue,maxValue)}minmax(Array(1,2,3,4))

minmax: (arr: Array[Int])(Int, Int)res55: (Int, Int) = (1,4)

Exercise06

编写一个函数,接受一个字符串的集合,以及一个从字符串到整数值的映射。返回整形的集合,其值为能和集合中某个字符串相对应的映射的值。举例来说,给定Array(“Tom”,“Fred”,“Harry”)和Map(“Tom”->3,“Dick”->4,“Harry”->5),返回Array(3,5)。提示:用flatMap将get返回的Option值组合在一起

def getF(arr:Array[String],map1:Map[String,Int])={ // 在可能返回空的方法使用Option[X]作为返回类型。 // 如果有值就返回Some[X]. Some也是Option的子类),否则返回None arr.flatMap(i=>if (map1.contains(i)){Some(map1(i))}else{None})}getF(Array("Tom","Fred","Harry"),Map("Tom"->3,"Dick"->4,"Harry"->5))

getF: (arr: Array[String], map1: Map[String,Int])Array[Int]res80: Array[Int] = Array(3, 5)

Exercise07

实现一个函数,作用与mkStirng相同,提示:使用reduceLeft实现试试

val arr=Array(1,2,3,4)// mkString把集合元素按照指定连接符,拼接成字符串println(arr.mkString(","))// 这里的问题是拼接时,数据类型为变化,需要做调整def mergeString(arr:Array[Int],sign:String)={ def mergeS(x:Any,y:Any)={ x.toString+sign+y.toString } arr.reduceLeft(mergeS)}println(mergeString(arr,"+"))

1,2,3,41+2+3+4arr: Array[Int] = Array(1, 2, 3, 4)mergeString: (arr: Array[Int], sign: String)Any

Exercise08

编写一个函数,将Double数组转换成二维数组。传入列数作为参数。举例来说,传入Array(1,2,3,4,5,6)和3列,返回Array(Array(1,2,3), Array(4,5,6)) // 啥叫Double数组。。。,数据类型是double?举例又是Int…

def transformArr(arr:Array[Int],cols:Int)={ val arr0 = scala.collection.mutable.ArrayBuffer[Any]() for (i<-0 to (arr.length-1,cols)){ arr0.append(arr.slice(i,i+cols)) } arr0.toArray}transformArr(Array(1,2,3,4,5,6),3)

transformArr: (arr: Array[Int], cols: Int)Array[Any]res125: Array[Any] = Array(Array(1, 2, 3), Array(4, 5, 6))

2020-03-14 于南京市栖霞区

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot log4j2日志框架整合与使用过程解析
下一篇:美食搜索 小程序(mpvue框架)(兴隆镇附近美食搜索)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~