Scala基础(二)

一、元组

可以包含不同类型的元素
最多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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值