原文鏈接: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.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