Scala基础(二)

it2023-09-03  71

一、元组

可以包含不同类型的元素 最多22个元素 使用下划线访问元素 “_”

//元组定义方式一 var tupleDemo=("hello",2.4,10,"a","world") //迭代器遍历 tupleDemo.productIterator.foreach(x=>println(x)) //元组定义方式二 var tupleDemo2=new Tuple5("a","b","c","d","e") //元组定义方式三 def mike="mike"->5->6 println(mike) println(mike.getClass) //获取类型 //元组定义方式四 val tpl=("zhanghao","xinjiekou","19") val (name,address,age)=tpl println(name) println(address) println(age) }

二、Scala集合

Seq 序列,元素按顺序排列 Set 集合,元素不重复 Map 映射,键值对集合

不可变集合 scala.collection.immutable 默认scala选择不可变集合

Set:ListSet、HashSet、TreeSet Map:ListMap、HashMap、TreeMap Seq:Vector、String、Range、List、Stack、Stream、Queue indexedSeq 读取效率高,应用于随机访问比较频繁 linearSeq 写的效率高,应用于数据量大,经常插入、删除 可变集合:可以修改、添加或移除一个集合的元素 scala.collection.mutable • List常用操作

var a=List("a","b","c") //增加元素,默认不可变类型 a:+"x" "x"+:a //可变List增加元素,需要先导入可变包 import scala.collection.mutable._ ListBuffer(1,2,3,4) val lb=ListBuffer(1,2,3,4) lb+=100 lb+=:lb List(22,23)++=:lb var b=List(20,5,100,11,50) var iter=b grouped 2 //分组 iter.next() var b=List(20,5,100,11,50) var iter2=b.sliding(2) //分组,此方法会滑动打印,默认一个元素,可在后面指定滑动元素个数 var iter2=b.sliding(2,2) 则会滑动两个元素 iter2.next() var a1=Array(1,2,3) var a2=Array(2,3,4,5) var a=List.concat(a1,a2) //合并Array形成List var a3=a1++a2 //合并Array形成一个新的Array 区别在于形成的List不可修改,Array可以修改 var b=List(20,5,100,11,50) b.filter(x=>x%2!=0) //过滤操作 只有一个参数的时候可以简写:b.filter(_%2!=0) b.reverse //反转 //排序操作 b.sorted //默认升序 b.sorted(Ordering.Int.reverse) //降序 b.sortWith(_<_) //升序 b.sortWith(_>_) //降序 b.sortBy(x=>x) //升序 b.sortBy(x=>x*(-1)) //降序 • Set常用操作 var a=Set("a","b","c") a+="m" //增加元素 a-="m" //减少元素 var b=Set("a","ab","cc") a--b //a去除与b相交的,即a与b的差集 等同于 a&~b a diff b a++b //a与b的并集 等同于 a|b a&b //a与b的交集

• Map常用操作

var a=Map("a"->1,"b"->2,"c"->3) //增加元素 a+=("j"->0) //改变元素 a+=("j"->10) //将集合a的元素放入b集合,中途会添加修改元素 var b=a++Map("a"->33,"d"->2) //for遍历k,v for((k,v)<- a){println(k+v)}

三、Scala Stream&Vector

• Stream是List惰性版,它只确定第一个值,后面的值用到再求值,可以放值数据过大全部加载导致内存溢出

val stream =(1 to 10000).toStream stream.head stream.tail stream(3) stream.tail

• Vector拥有连续的内存空间,利于随机存取(直接访问)

val v=Vector(1,2,3) val v1=v++Vector(3) //添加v和新元素到v1 v1.length //查看v1元素个数 val x=IndexedSeq(1,2,3)
最新回复(0)