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

原文地址:https://www.cnblogs.com/wuxiaolong4/p/11827305.html

时间: 2024-10-12 11:30:24

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

快学SCALA(3)--数组相关操作

val a = Array(2, 4, 5, 6) val result = for(elem <- a) yield 2 * elem //result = (4,8, 10, 12) val result1 = for(elem <- a if elem % 2 == 0) yield 2 * elem //result1 = (4,8,12) val result2 = a.filter(_ % 2 == 0).map(2 * _ ) //result = (4,8,12) val re

scala学习3 数组相关操作映射和元组

一.定长数组 如果需要一个长度不变的数组,可以使用Scala中的Array. val nums = new Array[int](10) val s = Array("Hello","world") 二.变长数组:数组缓冲 1. val b = ArrayBuffer[int]() 2.追加元素 b +=(1,2,3,4,5) 3.追加任何集合 b ++= Array(8,13,21) 4.移除最后5个元素 b.trimEnd(5) 5.插入元素 b.insert(

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

3 数组相关操作 3.1 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 random和yield的使用 Scala代码   import scala.math.random def randomArray(n:Int)={ for(i <- 0 until n) yield (random * n).toInt } println(randomArray(10).mkString(",")) 3.2 编写一个循环,将整数数组中相邻的元

Scala学习(三)----数组相关操作

数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不关心其他选择,而只是想马上开始用数组.本篇的要点包括: 1. 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 2. 提供初始值时不要使用new 3. 用()来访问元素 4. 用for (elem<-arr)来遍历元素 5. 用for (elem<-arr if…)…yie

Scala详解---------数组相关操作

Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合. 取替声明单个变量,如number0, number1, ..., 和number99,声明一个数组变量,如号码和使用numbers[0],numbers[1],...,numbers[99]表示单个变量.本教程介绍了如何声明数组变量,创建数组和使用索引的过程变量数组.数组的第一个元素的索引是数字0和最后一个元素的索引为元素的总数减去1.

快学Scala-第三章 数组相关操作

知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) //10个元素的字符串数组,所有元素初始化为null val s= Array("Hello","World") //长度为2的Array(String) 类型是编译器推断出来的,已提供初始值就不需要new s(0) = "Goodbye" //Arr

scala 入门(2)--数组相关操作

scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象. 实例化过程中,可以用值和类型使对象参数化(创建对象的同时完成对它的设置) val nums = new Array[Int](5); //含5个整数的数组,元素默认初始化为0: val arr = new Array[String](10);  //含10个字符串的数组,元素默认初始化为null

scala学习第三章数组相关操作

val b = new ArrayBuffer[Int]() //或者 new ArrayBuffer[Int] b += 1 //ArrayBuffer(1) 用+= 在尾端添加元素 b += (1,2,3,5) //ArrayBuffer(1,1,2,3,5) 在尾端添加多个元素 b ++= Array(1,2,3) //ArrayBuffer(1,1,2,3,5,1,2,3) 在尾端追加集合 用++= b.trimEnd(5) //ArrayBuffer(1,1,2) 移除最后5个元素 b

Ch03 数组相关操作 - 练习

1. 编写一段代码,将a设置为一个n个随机数的数组,要求随机数介于0(包含)和n(不包含)之间. //import java.lang.Math def getArray(n:Int)={   val nums = new Array[Int](n)   for(i <- 0 until nums.length){     nums(i) = (Math.random() * n).toInt    }   nums }   getArray(10) //res18: Array[Int] =