日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快学Scala习题解答—第三章 数组相关操作

發布時間:2025/3/11 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快学Scala习题解答—第三章 数组相关操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:http://blog.csdn.net/ivan_pig/article/details/8257365

--------------------------------------------------

4?數組相關操作

4.1?編寫一段代碼,將a設置為一個n個隨機整數的數組,要求隨機數介于0(包含)和n(不包含)之間

random和yield的使用

import scala.collection.mutable.ArrayBuffer import scala.math.randomdef randomArray(n:Int):Array[Int]={val a = for(i <- 0 until n) yield (random * n).toInta.toArray }

4.2?編寫一個循環,將整數數組中相鄰的元素置換。例如,Array(1,2,3,4,5)經過置換后變為Array(2,1,4,3,5)

對數組方法的使用

def reorderArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferfor(i <- 0 until (t.length,2) if i + 1 < t.length){val a = t(i)val b = t(i + 1)t.remove(i,2)t.insert(i,b)t.insert(i + 1,a)}t.toArray }

4.3?重復前一個練習,不過這一次生成一個新的值交換過的數組。用for/yield

def reorderArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferval result = for(i <- 0 until t.length)yield if(i%2==0 && i + 1 < t.length)t(i + 1)else if(i%2==0 && i + 1 >= t.length)t(i)else t(i - 1)result.toArray }

感覺代碼有點丑也難讀。需要優化。

4.4?給定一個整數數組,產生一個新的數組,包含元數組中的所有正值,以原有順序排列,之后的元素是所有零或負值,以原有順序排列

//使用循環def reorderArray(arr:Array[Int]):Array[Int]={val a = ArrayBuffer[Int]()val b = ArrayBuffer[Int]()arr.foreach(arg => if(arg > 0) a += arg else b += arg)a ++= ba.toArray} //使用filter def reorderArray(arr:Array[Int]):Array[Int]={val a = arr.filter(_ > 0).map(1 * _)val b = arr.filter(_ <= 0).map(1 * _)val c = a.toBufferc ++= bc.toArray }

4.5?如何計算Array[Double]的平均值?

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

4.6?如何重新組織Array[Int]的元素將他們以反序排列?對于ArrayBuffer[Int]你又會怎么做呢?

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

4.7?編寫一段代碼,產出數組中的所有值,去掉重復項。(提示:查看Scaladoc)

產出數組的代碼就不編寫了。去重只需要調用api即可

def distinctArray(arr:Array[Int]):Array[Int]={val t = arr.toBuffert.distinct.toArray }

4.8?重新編寫3.4節結尾的示例。收集負值元素的下標,反序,去掉最后一個下標,然后對每個下標調用a.remove(i)。比較這樣做的效率和3.4節中另外兩種方法的效率

性能嘛,自己比較吧!

def removeArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferval idx = ArrayBuffer[Int]()for(i <- 0 until t.length){if(t(i) < 0)idx += i}idx.remove(0)idx.reverseidx.foreach(t.remove(_))t.toArray }

4.9?創建一個由java.util.TimeZone.getAvailableIDs返回ide時區集合,判斷條件是它們在美洲。去掉"America/"前綴并排序

顯示的都是中文時間,后續的過濾無法操作。只列出所有的時區

val t = for(i <- getAvailableIDs) yieldgetTimeZone(i).getDisplayName()

4.10?引入java.awt.datatransfer.并構建一個類型為SystemFlavorMap類型的對象:

val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap] 然后以DataFlavor.imageFlavor為參數調用getNativesForFlavor方法,以Scala緩沖保存返回值。 (為什么用這樣一個晦澀難懂的類?因為在Java標準庫中很難找到使用java.util.List的代碼)

val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap] println(flavors.getNativesForFlavor(DataFlavor.imageFlavor).toArray.toBuffer.mkString(" | ")Blog URL:http://www.ivanpig.com/blog/?p=461

總結

以上是生活随笔為你收集整理的快学Scala习题解答—第三章 数组相关操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。