[关闭]
@amoszhou 2014-05-06T06:27:25.000000Z 字数 1456 阅读 1272

第三章:数组操作

scala课后习题


1. 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间

  1. def randomArray(n:Int)={
  2. val a = new Array[Int](n)
  3. for(i <- 0 until a.length){
  4. a(i) = new Random().nextInt(n)
  5. }
  6. a
  7. }
  1. def randomArray(n:Int)={
  2. (for(i <- 0 until n ) yield new Random().nextInt(n)).toArray
  3. }

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

  1. //2.交换相邻位置的元素
  2. def exchange(arr : Array[Int])={
  3. for(i <- 0 until (arr.length-1,2)) {
  4. val temp = arr(i)
  5. arr(i) = arr(i+1)
  6. arr(i+1) = temp
  7. }
  8. arr
  9. }

这题有人说先转成ArrayBuffer,再调用removeinsert这2个API完成,但是数组中间进行删除和插入效率并不高,不如直接索引找到值,进行修改。当然最爽的做法是直接arr。当然这个题最好的做法就是用函数arr.grouped(2).reverse

3. 重复前一个练习,不过这一次生成一个新的值交换过的数组。用for/yield

  1. def exchangeWithNewArray(arr:Array[Int])={
  2. (for(i <- 0 until arr.length) yield {
  3. if(i%2 != 0){
  4. arr(i-1)
  5. }else{
  6. if(i+1 ==arr.length){
  7. arr(i)
  8. }else {
  9. arr(i + 1)
  10. }
  11. }
  12. }).toArray
  13. }
  1. def exchangeWithNewArray2(arr:Array[Int])={
  2. (for(i<-0 until arr.length by 2; j<- i+1 to i by -1 if j<arr.length) yield arr(j)).toArray
  3. }

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

随机数组,我们之前已经做过了,这里就不在做了,我们直接看下怎么排序

  1. def randomSortedArray(arr:Array[Int])={
  2. Array.concat(arr.filter(_>0),arr.filter(_<=0))
  3. }

5. 如何计算Array[Double]的平均值?

  1. def aveArray(arr:Array[Double]):Double={
  2. arr.sum/arr.length
  3. }

6. 如何重新组织Array[Int]的元素将他们以反序排列?对于ArrayBuffer[Int]你又会怎么做呢?

  1. def reverseArray(arr:Array[Int]):Array[Int]={
  2. arr.reverse
  3. }

ArrayBuffer也可以同样处理

7.编写一段代码,产出数组中的所有值,去掉重复项。

  1. def distinctArray(arr:Array[Int]):Array[Int]={
  2. arr.distinct
  3. }

9. 创建一个由java.util.TimeZone.getAvailableIDs返回ide时区集合,判断条件是它们在美洲。去掉"America/"前缀并排序

直接for...if..yield

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注