ScalaNote20-集合练习题02

Exercise01

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

val n = 10
val 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 = 10
arr: 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 = 0
for(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,4
1+2+3+4





arr: 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 于南京市栖霞区

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值