Scala 集合

-------------------集合-----------------

scala集合有两种类型:可变mutable
不可变Immutable
val b = List(2,4,6)
不可变集合:内容不可变(数组内容可变改)
长度不可变

可变集合:
注意:需要导包
import scala.collection.mutable._
val buff = ArrayBuffer(2,3,4)
内容可变:buff(1) = 300
长度可变:buff += 200

--------------------长度可变的数组-------------------

创建长度可变数组:
val ab = scala.collection.mutable.ArrayBuffer(2,3,4)

长度可变:
ab += 440

-------------------Seq序列-----------------------------

不可变的序列
在scala中列表要么为空(Nil表示空列表)
head元素上加上一个tail列表

head:取头元素
tail:取尾元素(除了头全是尾)

5::Nil 空列表的头加入一个元素
1::2::3::Nil 空列表前加入三个元素1,2,3

scala> 1::2::3::Nil
res55: List[Int] = List(1, 2, 3)

scala> res55.head
res56: Int = 1

scala> res55.tail
res57: List[Int] = List(2, 3)
 +  字符串的拼接 
++  两个集合相加 
++: 合并集合 
.+: 头部追加元素 
 :+  尾部追加元素 
 ::: 两个集合相加 
 count 统计个数 
 filter 过滤 
 sortBy 排序 
 sortWith 比较排序 
 scala> val ll = List(("a",1),("b",23),("c",5))
 ll: List[(String, Int)] = List((a,1), (b,23), (c,5))
 scala> ll.sortWith((x,y)=>x._2>y._2 )
 res61: List[(String, Int)] = List((b,23), (c,5), (a,1))

 grouped 分组 
 scala> ll.grouped(2).toList
res13: List[List[(String, Int)]] = List(List((a,2), (b,2)), List((c,3), (d,7)))
2个为一组

 fold 折叠 
 scala> ll.fold(0)((x,y) => (x+y))
res9: Int = 6

scala> ll.fold(2)((x,y) => (x+y))
res10: Int = 8

scala> ll.fold(2)((x,y) => (x-y))
res11: Int = -4

 foldLeft 左折叠 
 foldRight 右折叠 
 scala> val ll = List(1,2,3)
ll: List[Int] = List(1, 2, 3)
scala> ll.foldRight(0)((x,y) => (x-y))
res16: Int = 2
scala> (1-(2-(3-0)))
res17: Int = 2
scala> ll.foldLeft(0)(_-_)
res18: Int = -6
scala> (((0-1)-2)-3)
res20: Int = -6

 reduce 聚合 
 scala> ll
res21: List[Int] = List(1, 2, 3)

scala> ll.reduce(_+_)
res22: Int = 6

 aggregate 先局部聚合再全局聚合 
 zip 拉链 
 sum 求和 

Set

无序的,不重复的集合 
Set不可变的集合 
 


val l5 = collection.mutable.HashSet(2,3,4) 
HashSet可变的集合 
 
remove 删除元素 
-= 删除元素 
++ 集合相加 
++= 相加并赋值 

Map

不可变Map:val m = Map[String,Int]("hello"->2,"rebba"->8) 
可变Map: 
 
getOrElse:如果有值返回值,没有返回默认值 

元祖tuple

元祖中可以是任意元素
val t = (2,true,“hunter”,Unit)

取元素:t._1

对偶元祖:有两个元素的元祖

scala> t
res31: Array[(String, Int)] = Array((ycf,12), (aa,18))

scala> t.foldLeft(0)(_+_._2)
res32: Int = 30

简单来说,
Seq是列表,适合存有序重复数据,进行快速插入/删除元素等场景
Set是集合,适合存无序非重复数据,进行快速查找海量元素的等场景
总之,最大的区别不在语言实现上,而是数据结构的使用上。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值