从零学scala(二)数组相关操作、映射和元组

一:数组相关操作

定长数组

        val array = Array[String]("a","b","c") //直接初始化数组的内容
        println(array.mkString("|"))

        val array = new Array[String](2) //new一个长度为2的数据在通过更新的方法进行赋值
        array.update(0, "0")
        array.update(1, "1")
        println(array.mkString("|"))

变长数组:数组缓冲

        import scala.collection.mutable.ArrayBuffer
        val data = new ArrayBuffer[String]();
        data.-=("3") //单个元素删除操作
        data.-=("3","2") //单个元素删除操作
        data.+=("1") //单个元素添加操作
        data.+=("2","3","4") //多个元素添加操作
        data.++=(Array("5","6","7")) //可变数组操作不变数组
        data.++=(data) //可变数组操作可变数组
        data.trimEnd(2) //移除最后五个元素
        data.remove(2) //第二位数组移除第二位元素
        data.remove(2,3) //第二位开始移除三个元素
        val array = data.toArray[String] //转换成数组

遍历数组和数组缓冲

        val array = Array[String]("a","b","c","d") //转换成数组
        for(i <- array)              //遍历每个元素
                println(i)


        for(i <- 0 until array.length)    //遍历数组长度
                println(array.apply(i))

        for(i <- 0 until (array.length,2))    //每两个元素跳一下
                println(array.apply(i))

        val array = Array[String]("a","b","c","d","e","f","h")     
        for(i <- (0 until array.length).reverse )                       //反转,但是IDE提示的时候提示不到这个方法
                println(array.apply(i))

数组转换  

        val array = Array[String]("a","b","c","d","e","f","h")
        val arrayB = for(i <- (0 until array.length).reverse ) yield array.apply(i) +“a”    //  数组对象yield之后产生数组对象,数组buffer对象yield之后产生数组buffer对象

        val array = Array[String]("a","b","c","d","e","f","h")
        val arrayB = array.map { x => x+"a" }.filter { x => x.equals("aa") }     //链式编程方法

常用方法

        val array = Array[Int](1,2,3,4).sum //求和
        val array1 = Array[Int](1,2,3,4).max //最大值
        val array2 = Array[Int](1,2,3,4)
        array2.sortWith((a,b)=>a > b).mkString("|") //排序

scaladoc

        val array2 = ArrayBuffer[Int](2,2,3,4)
        array2.append(6) //添加新元素
        array2.appendAll(array2) //添加新数组
        array2.count( x => {if (x == 6) true else false}) //计算满足个数的值
        array2.+=(7) //添加新元素
        val max = array2.max //数组最大值
        println(array2.mkString("|"))
        val arrayBuffer = array2.padTo(15, 1234) //将数组转换为固定长度的数组,不够的话用第二个参数填充
        println(arrayBuffer.mkString("|"))

多维数组

        val array = Array.ofDim[String](2, 4) //两行四列
        array(1)(3) = "1234";
        println(array.mkString("|"))

与Java互操作

        import scala.collection.JavaConversions._ //想要把scala转换为java的方法使用这个
        //里面包含了大量将scala集合转换为java的类

二:映射和元组

构造映射

        val map = Map("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
        val map1 = scala.collection.mutable.Map[String,Int]() //此方法生成一个变长的map集合
        map1.+=(("dd",7))
        println(map1.mkString("|"))

获取映射中的值

        val map = Map("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
        println(map.getOrElse("dd", "100")) //去拿dd的值,如果没有的话就返回100

更新映射中的值

        val map1 = scala.collection.mutable.HashMap("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
        map1.+=(("dd"->7)) //不可变map这个方法是返回新的map
        println(map1.mkString("|"))
        map1.-=("bb") //删除key
        println(map1.mkString("|"))
        map1.update("aa", 100) //不可变map没有这个方法
        println(map1.mkString("|"))

迭代映射

        val map1 = scala.collection.mutable.HashMap("aa"->4,"bb"->5,"cc"->6)
        for((key,value)<-map1){
                println(key +"|" + value)
        }
        println()
        for(key<-map1.keySet){
                println(map1.apply(key))
        }
        println()
        for((key,value)<-map1) yield(value,key) //反转map结构,key,value相互转换

已排序映射

        //生成不可变的的排序的map,如果必须要可变的话,建议用treemap
        val map1 = scala.collection.immutable.SortedMap("mm"->4,"aa"->5,"cc"->6)
        for((key,value)<-map1){
                println(key +"|" + value)
        }
        println()
        //生成可变的有顺序的map
        val map2 = scala.collection.mutable.LinkedHashMap("mm"->4,"aa"->5,"cc"->6)
        for((key,value)<-map2){
                println(key +"|" + value)
        }

与Java互操作

        //将一而终类型的变量转换为另一种类型的变量,这就是JavaConversions魅力
        //下面的例子就是将Properties转换为Map类型
        import scala.collection.JavaConversions.propertiesAsScalaMap
        val map:scala.collection.Map[String,String] = System.getProperties
        println(map.toString())

        //可用的还有
        import scala.collection.JavaConversions.mapAsScalaMap
        import scala.collection.JavaConversions.mapAsScalaConcurrentMap

元组

        //元组每个元素都可以是不同的类型
        val tt = ("aa",11,2.0f,5l)
        println(tt._1) //可以用_1,_2,_3,_4访问

拉链

        val aa = Array(1,2,3,4)
        val bb = Array(5,6,7,8)
        val cc = aa.zip(bb)//拉链操作
        println(cc.mkString("|"))

相关推荐