Scala學習(三)練習

sunddenly發表於2015-06-27

Scala陣列相關操作&練習

1. 1. 編寫一段程式碼,將a設定為一個包含n個隨機整數的陣列,要求隨機數介於0(包含)和n(不包含)之間

def main (args: Array[String]) {
  createArr(10).foreach(println)
}
def createArr(n:Int):Array[Int]={
  val arr=new Array[Int](n)
  val rand=new Random()
  for(ele <- arr)
    yield rand.nextInt(n)
}

2. 編寫一個迴圈,將整數陣列中相鄰的元素置換。例如,Array(1,2,3,4,5) 經過置換後變為Array(2,1,4,3,5)

def main (args: Array[String]) {
  val a=Array(1,2,3,4,5)
  Swap(a)
  a.foreach(print)
}
def Swap(arr:Array[Int]):Unit={
  for(i <- 0 until (arr.length-1,2)){
    val tmp=arr(i)
    arr(i)=arr(i+1)
    arr(i+1)=tmp
  }
}

3. 重複前一個練習,不過這一次生成一個新的值交換過的陣列。用for/yield

def main (args: Array[String]) {
  val a=Array(1,2,3,4,5)
  val b=SwapYield(a)
  b.foreach(print)
}
def SwapYield(arr:Array[Int])={
  for(i <- 0 until arr.length) yield {
    if (i<(arr.length-1) && i%2==0){
      val tmp=arr(i)
      arr(i)=arr(i+1)
      arr(i+1)=tmp
    }
    arr(i)
  }
}

4. 給定一個整數陣列,產出一個新的陣列,包含元陣列中的所有正值,以原有順序排列,之後的元素是所有零或負值,以原有順序排列

def main (args: Array[String])= {
  val a=Array(1,-2,0,-3,1,2)
  val b=sigArr(a)
  b.foreach(println)
}
def sigArr(arr:Array[Int])={
  val buff=new ArrayBuffer[Int]()
  buff++=(for(ele <- arr if ele>0) yield ele)
  buff++=(for(ele <- arr if ele==0) yield ele)
  buff++=(for(ele <- arr if ele<0) yield ele )
  buff.toArray
}

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

def main (args: Array[String])= {
  val a=Array[Double](1,4,2,10,3,-1,-3)
  val b=Avgarr(a)
  println(b)
}
def Avgarr(arr:Array[Double])={
  arr.sum/arr.length
}

6. 如何重新組織A r r a y [ I n t ] 的元素將它們以反序排列,對於ArrayBuffer[Int]你又會怎麼做呢

def main (args: Array[String])= {
  val a=Array(5,4,3,2,1)
  resverseArr(a)
  a.foreach(println)

  //ArrayBuffer反轉
  val b=ArrayBuffer(1,2,3,4,5)
  val c=ArrayBuffer[Int]()
  c++=b.reverse
  c.foreach(println)
}

def resverseArr(arr:Array[Int]) {
  val len=arr.length
  for(i <- 0 until len/2){
    val tmp=arr(i)
    arr(i)=arr(len-1-i)
    arr(len-1-i)=tmp
  }
}

7. 編寫一段程式碼,產出陣列中的所有值,去掉重複項。(提示:檢視Scaladoc)

def main (args: Array[String])= {
  val a=ArrayBuffer(1,2,2,23,3,4,5,6,3)
  val b=ArrayBuffer[Int]()
  b++=a.distinct
  b.foreach(println)
}

8. 收集負值元素的下標,反序,去掉最後一個下標,然後對每一個下標呼叫a.remove(i)。

def main (args: Array[String])= {
  val a=Array(1,-2,3,4,5,-1,-3,-4)
  val b= delRevFirst(a)
  b.foreach(println)
}

def delRevFirst(arr:Array[Int])={
  val indexs=for(i <- 0 until arr.length if arr(i)<0) yield i
  val dropindexs=indexs.reverse.dropRight(1)
  val tmp=arr.toBuffer
  for(index <- dropindexs)
    tmp.remove(index)
  tmp
}

9. 建立一個由Java.util.TimeZone.getAvailableIDs返回的時區集合,判斷條件是它們在美洲。去掉"America/"字首並排序

def main (args: Array[String])= {
  val a=TimeZone()
  a.foreach(println)
}
def TimeZone()={
  val arr=java.util.TimeZone.getAvailableIDs()
  val tmp=for(ele <-arr if ele.startsWith("America/")) yield {
    ele.drop("America/".length)
  }
  scala.util.Sorting.quickSort(tmp)
  tmp
}

10. 引入java.awt.datatransfer._並構建一個型別為SystemFlavorMap型別的物件

def main (args: Array[String])= {
  val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
  println(flavors.getNativesForFlavor(DataFlavor.imageFlavor).toArray.toBuffer.mkString(" | "))
}

如果,您認為閱讀這篇部落格讓您有些收穫,不妨點選一下右下角的【推薦】。
如果,您希望更容易地發現我的新部落格,不妨點選一下左下角的【關注我】。
如果,您對我的部落格所講述的內容有興趣,請繼續關注我的後續部落格,我是【Sunddenly】。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。

相關文章