• 从零学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("|"))

  • 相关阅读:
    hdu1561 The more, The Better 树形DP+分组背包
    hdu1520 Anniversary party 简单树形DP
    hdu1054 Strategic Game 树形DP
    hdu1011 Starship Troopers 树形DP
    hdu4681 String DP(2013多校第8场)
    zoj3469 Food Delivery 区间DP
    LightOJ 1422 -Halloween Costumes 区间DP
    hdu4283 You Are the One 区间DP
    poj1651 Multiplication Puzzle 区间DP
    codeforce 149D Coloring Brackets 区间DP
  • 原文地址:https://www.cnblogs.com/wuxiaolong4/p/11827305.html
Copyright © 2020-2023  润新知