第三章:数组操作

第三章:数组操作

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

  • java风格
def randomArray(n:Int)={
    val a = new Array[Int](n)
    for(i <- 0 until a.length){
        a(i) = new Random().nextInt(n)
    }
    a
}
  • scala风格
def randomArray(n:Int)={
    (for(i <- 0 until n ) yield  new Random().nextInt(n)).toArray
}

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

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

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

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

  • 第一种最开始想到的
def exchangeWithNewArray(arr:Array[Int])={
        (for(i <- 0 until arr.length) yield {
            if(i%2 != 0){
                arr(i-1)
            }else{
                if(i+1 ==arr.length){
                    arr(i)
                }else {
                    arr(i + 1)
                }
            }
        }).toArray
    }
  • 后来想到的
    def exchangeWithNewArray2(arr:Array[Int])={
        (for(i<-0 until arr.length by 2; j<- i+1 to i by -1 if j<arr.length) yield arr(j)).toArray
    }

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

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

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

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

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

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

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

ArrayBuffer也可以同样处理

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

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

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

直接for...if..yield

你可能感兴趣的:(scala)