Scala Language Programing Guide(章节七)

作者:jiangzz 电话:15652034180 微信:jiangzz_wx 微信公众账号:jiangzz_wy 百知教育

集合/数组(重点)

Array

Array在Scala中指的是数组,创建方式如下所示,可以看出分配大小为10,每个元素都分配了默认值。

scala> var array=new Array[Int](10)
array: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

修改指定位置元素

scala> array(0)=1

scala> array
res57: Array[Int] = Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0)

scala> array.update(1,2)

scala> array
res62: Array[Int] = Array(1, 2, 0, 0, 0, 0, 0, 0, 0, 0)

获取数组长度

scala> array.length
res63: Int = 10

scala> array.size
res64: Int = 10

数组去重

scala> array
res66: Array[Int] = Array(1, 2, 0, 0, 0, 0, 0, 0, 0, 0)

scala> array.distinct
res67: Array[Int] = Array(1, 2, 0)

Range

改元素指定在创建的时候指定步长,相比较于Array,该Range只读,不允许修改。

scala>  var range= new Range(0,10,2)
range: scala.collection.immutable.Range = Range(0, 2, 4, 6, 8)

scala> var range= 0 to 10 by 3
range: scala.collection.immutable.Range = Range(0, 3, 6, 9)

scala> var range=0 until 10 by 2
range: scala.collection.immutable.Range = Range(0, 2, 4, 6, 8)

Vector

按照下标顺序排列的向量,向量不支持修改。

scala> var vec=Vector(0,10,1)
vec: scala.collection.immutable.Vector[Int] = Vector(0, 10, 1)

scala> var vector=for(i<- 0  to 10 by 2) yield i
vector: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 2, 4, 6, 8, 10)

Iterator

scala> var it=Iterator(1,2,3)
it: Iterator[Int] = non-empty iterator

scala> it.foreach(println)
1
2
3

scala> it.isEmpty
res41: Boolean = true

List

:: / +: 追加元素
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list::=10

scala> list
res84: List[Int] = List(10, 1, 2, 3)

scala> list(0)=11
<console>:13: error: value update is not a member of List[Int]
       list(0)=11
       ^

scala> list +:= -1

scala> list
res87: List[Int] = List(-1, 10, 1, 2, 3)

:::合并集合
scala> var list=List(1,2,3)
scala> var prefix=List(4,5,6)
scala> list :::= (prefix) //在list元素之前追加prefix元素,生成新的集合
scala> list
res32: List[Int] = List(4, 5, 6, 1, 2, 3)
drop/dropRight
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)
scala> list.drop(2) //删除前n个元素
res30: List[Int] = List(3)
slice
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.slice(1,3)
res104: List[Int] = List(2, 3)
reverse
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.reverse
res105: List[Int] = List(3, 2, 1)
take/takeRight
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.take(2)
res106: List[Int] = List(1, 2)

scala> list.takeRight(2)
res107: List[Int] = List(2, 3)
takeWhile
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.takeWhile(x=> x<3 )
res108: List[Int] = List(1, 2)

scala> list.takeWhile(x=> x%2==1 )
res110: List[Int] = List(1)

head/last/tail
scala> var list=List(1,2,3)
list: List[Int] = List(1, 2, 3)

scala> list.head
res111: Int = 1

scala> list.tail
res112: List[Int] = List(2, 3)

scala> list.last
res113: Int = 3

ListBuffer

update
scala> import scala.collection.mutable._
import scala.collection.mutable._

scala> var list=ListBuffer[Int]()
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

scala> var list=ListBuffer(1,2,3)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

scala> list.update(0,10)

scala> list
res1: scala.collection.mutable.ListBuffer[Int] = ListBuffer(10, 2, 3)
+=/+=:/++=/++=:

添加删除元素

scala>  var list=ListBuffer(1,2,3)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

scala> list.+=(4)
res12: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)

scala> list.+=:(5)
res13: scala.collection.mutable.ListBuffer[Int] = ListBuffer(5, 1, 2, 3, 4)

scala> list.++=(List(6,7,8))
res14: scala.collection.mutable.ListBuffer[Int] = ListBuffer(5, 1, 2, 3, 4, 6, 7, 8)

+=集合末尾添加元素,+=:集合开始添加元素,++=追加集合在尾部,++=:在元素尾部添加元素

-/-=
scala> list.-(1)
res18: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3, 1)

scala> list
res19: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 1)

scala> var list=ListBuffer(1,2,3,1)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 1)

scala> list.-=(1)
res20: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3, 1)

scala> list
res21: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3, 1)

区别-表示创建新的集合但是不包含删除的这个元素,-=表示删除集合指定元素,更新原始集合

remove

删除指定位置元素

scala> var list=ListBuffer(1,2,3)
list: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3)

scala> list.remove(0)
res25: Int = 1

scala> list
res26: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3)
insert/insertAll

在指定位置之前插入元素

scala> list
res27: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3)

scala> list.insert(0,4)

scala> list
res29: scala.collection.mutable.ListBuffer[Int] = ListBuffer(4, 2, 3)

scala> list.insertAll(2,List(1,2,3))

scala> list
res31: scala.collection.mutable.ListBuffer[Int] = ListBuffer(4, 2, 1, 2, 3, 3)

prependToList

将list1结果添加到list2中,

scala>  var list1=List(1,2,3)
list1: List[Int] = List(1, 2, 3)

scala>  var list2=ListBuffer(0,0)
list2: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 0)

scala> list2.prependToList(list1)
res34: List[Int] = List(0, 0, 1, 2, 3)

scala> list2
res36: scala.collection.mutable.ListBuffer[Int] = ListBuffer(0, 0, 1, 2, 3)

Set(不可修改)

+/+=|-/-=
scala> var s=Set[Int](1,2,4,6,2)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 6)

scala> s.+=(1)

scala> s
s: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 6)

scala> s+(7)
res12: scala.collection.immutable.Set[Int] = Set(1, 6, 2, 7, 4)

区别是+创建新的Set并添加元素,不修改原始set,+=修改原始set,类似-、-=就不在阐述

size
scala> var s=Set[Int](1,2,4,6,2)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 6)

scala> s.size
res23: Int = 4

Set(可修改)

+/+=/-/-=
scala> var s=scala.collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> s.+(4)
res25: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s
res26: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> s.+=(4)
res27: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s
res28: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s.-(2)
res29: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

scala> s
res30: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4)

scala> s.-=(2)
res31: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

scala> s
res32: scala.collection.mutable.Set[Int] = Set(1, 3, 4)

remove/add
scala> var s=scala.collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala>  s.remove(2)
res37: Boolean = true

scala>  s.remove(-1)
res38: Boolean = false

scala> s
res39: scala.collection.mutable.Set[Int] = Set(1, 3)

scala> s.add(4)
res41: Boolean = true

HashMap(不可变)

+/+=/-/-=
scala> import scala.collection.immutable.HashMap
import scala.collection.immutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm+="工商"->"003"

scala> hm.+=(("工商1","004"))

scala> hm
res4: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm.-("工商")
res6: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm
res7: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> hm.-=("工商")

scala> hm
res9: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002, 工商1 -> 004)

get
scala> import scala.collection.immutable.HashMap
import scala.collection.immutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.get("招商").getOrElse("没有值")
res11: String = 002

scala> hm.get("招商1").getOrElse("没有值")
res12: String = 没有值

size
scala> hm
res16: scala.collection.immutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002, 工商1 -> 004)

scala> for(i<- hm) println(i._1+" -> "+i._2)
工商 -> 003
建设 -> 001
招商 -> 002
工商1 -> 004

merged
scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> var newhm=HashMap[String,String](("邮政","004"))
newhm: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004)

scala> var mergerFunction:((String,String),(String,String))=>(String,String) = (tuple1,tuple2)=>{
     |
     |    if(tuple1._1.equals(tuple2._1)){
     |       (tuple1._1,tuple2._2)
     |    }else{
     |      tuple1
     |    }
     |  }
scala> var res=hm.merged(newhm)(mergerFunction)
res: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004, 建设 -> 001, 招商 -> 002)

scala> res
res18: scala.collection.immutable.HashMap[String,String] = Map(邮政 -> 004, 建设 -> 001, 招商 -> 002)

scala> for(i<- res) println(i)
(邮政,004)
(建设,001)
(招商,002)

keys/values
scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.immutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.keys
res23: Iterable[String] = Set(建设, 招商)

scala> hm.values
res24: Iterable[String] = MapLike(001, 002)

HashMap(可变)

remove/put
scala> import scala.collection.mutable.HashMap
import scala.collection.mutable.HashMap

scala> var hm=HashMap[String,String](("建设","001"),("招商","002"))
hm: scala.collection.mutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002
                                                          
scala> hm+="工商"->"003"
res0: scala.collection.mutable.HashMap[String,String] = Map(工商 -> 003, 建设 -> 001, 招商 -> 002)

scala> hm-=("工商")
res1: scala.collection.mutable.HashMap[String,String] = Map(建设 -> 001, 招商 -> 002)

scala> hm.put("邮政","004")
res2: Option[String] = None
 
scala> hm.remove("工商")
res3: Option[String] = None
 
scala> for(i<- hm) println(i)
(建设,001)
(邮政,004)
(招商,002)

集合算子

排 序
scala> var lst=Array(1,4,6,3,2,5,7)
lst: Array[Int] = Array(1, 4, 6, 3, 2, 5, 7)

scala> lst.sorted
res30: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7)

scala> var list=Array(("a",1),("c",2),("b",3),("d",5))
list: Array[(String, Int)] = Array((a,1), (c,2), (b,3), (d,5))

scala> list.sortBy(tuple=>tuple._1)
res31: Array[(String, Int)] = Array((a,1), (b,3), (c,2), (d,5))

scala> list.sortBy(tuple=>tuple._2)
res32: Array[(String, Int)] = Array((a,1), (c,2), (b,3), (d,5))

scala> var list=Array(("a",1),("c",2),("b",3),("d",5))
list: Array[(String, Int)] = Array((a,1), (c,2), (b,3), (d,5))

scala> list.sortWith((t1,t2)=> t1._2 < t2._2)
res33: Array[(String, Int)] = Array((a,1), (c,2), (b,3), (d,5))

flatten
scala> var lst=List(Array("a","c"),Array("d","b"))
lst: List[Array[String]] = List(Array(a, c), Array(d, b))

scala> lst.flatten
res34: List[String] = List(a, c, d, b)
Map
scala>  var lst=List("hello world","good good study","day day up")
lst: List[String] = List(hello world, good good study, day day up)

scala> lst.map(item=>item.split(" "))
res35: List[Array[String]] = List(Array(hello, world), Array(good, good, study), Array(day, day, up))

scala> lst.map(item=>item.split(" ")).flatten
res36: List[String] = List(hello, world, good, good, study, day, day, up)

flatMap
scala> var lst=List("hello world","good good study","day day up")
lst: List[String] = List(hello world, good good study, day day up)

scala> lst.flatMap(item=>item.split(" "))
res39: List[String] = List(hello, world, good, good, study, day, day, up)

scala> lst.flatMap(_.split(" "))
res41: List[String] = List(hello, world, good, good, study, day, day, up)

filter
scala> var lst=List("hello world","good good study","day day up")
lst: List[String] = List(hello world, good good study, day day up)

scala> lst.flatMap(_.split(" ")).filter(_.equals("good"))
res42: List[String] = List(good, good)

groupBy
scala> var lst=Array("a","b","d","c","b","a","d","d")
lst: Array[String] = Array(a, b, d, c, b, a, d, d)

scala> lst.groupBy(x=>x)
res43: scala.collection.immutable.Map[String,Array[String]] = Map(b -> Array(b, b), d -> Array(d, d, d), a -> Array(a, a), c -> Array(c))

scala> var lst=Array(("a",1),("b",2),("a",2))
lst: Array[(String, Int)] = Array((a,1), (b,2), (a,2))

scala> lst.groupBy(x=>x._1).map(x=>(x._1,(for(i <- x._2) yield i._2).sum))
res44: scala.collection.immutable.Map[String,Int] = Map(b -> 2, a -> 3)

fold
scala> var lst=Array(Array(1,2,3),Array(1,2,4),Array(5,6,7),Array(9,4))
lst: Array[Array[Int]] = Array(Array(1, 2, 3), Array(1, 2, 4), Array(5, 6, 7), Array(9, 4))

scala> lst.flatten.fold(0)((x,y)=>x+y)
res45: Int = 44

aggregate
scala> var lst=List(1,2,4,5,6)
lst: List[Int] = List(1, 2, 4, 5, 6)
                  初始值   局部计算    汇总逻辑
scala> lst.aggregate(0)((x,y)=>x+y,(x,y)=>x+y)
res46: Int = 18

scala>

reduce
scala> var lst=List(1,2,4,5,6)
lst: List[Int] = List(1, 2, 4, 5, 6)

scala> lst.reduce(_+_)
res47: Int = 18

group
scala> var lst=Array(1,2,4,5,6,7)
lst: Array[Int] = Array(1, 2, 4, 5, 6, 7)

scala> lst.grouped(3).toList
res48: List[Array[Int]] = List(Array(1, 2, 4), Array(5, 6, 7))

zip
scala> var v=Vector(1,2,4)
v: scala.collection.immutable.Vector[Int] = Vector(1, 2, 4)

scala> v.zip(Array("a","b","c"))
res52: scala.collection.immutable.Vector[(Int, String)] = Vector((1,a), (2,b), (4,c))

unizp
scala> var v=List(("a",1),("b",2),("c",3))
v: List[(String, Int)] = List((a,1), (b,2), (c,3))

scala> v.unzip
res53: (List[String], List[Int]) = (List(a, b, c),List(1, 2, 3))

diff|intersect|union
scala> var v=List(1,2,3)
v: List[Int] = List(1, 2, 3)

scala> v.diff(List(2,3,5))
res54: List[Int] = List(1)

scala> var v=List(1,2,3,5)
v: List[Int] = List(1, 2, 3, 5)

scala> v.intersect(List(2,4,6))
res55: List[Int] = List(2)

scala> var v=List(1,2,3,5)
v: List[Int] = List(1, 2, 3, 5)

scala> v.union(List(2,4,6))
res56: List[Int] = List(1, 2, 3, 5, 2, 4, 6)

distinct
scala> var v=List(1,2,3,3,5)
v: List[Int] = List(1, 2, 3, 3, 5)

scala> v.distinct
res57: List[Int] = List(1, 2, 3, 5)

Sliding
scala> var v=List(1,2,3,3,5)
v: List[Int] = List(1, 2, 3, 3, 5)

scala>  v.sliding(3,1).toList
res60: List[List[Int]] = List(List(1, 2, 3), List(2, 3, 3), List(3, 3, 5))

字符统计
scala> var arrs=Array("this is a demo","good good study","day day up")
arrs: Array[String] = Array(this is a demo, good good study, day day up)

scala> arrs.map(_.split(" ")).flatten.map((_,1)).groupBy(_._1).map(x=>(x._1,(for(i<- x._2) yield i._2.toInt).toList.sum)).toList.sortBy(_._1).foreach(println)
(a,1)
(day,2)
(demo,1)
(good,2)
(is,1)
(study,1)
(this,1)
(up,1)
文件字符
var source=Source.fromFile("D:\\demo\\words\\t_words")
var array=ArrayBuffer[String]()
val reader = source.bufferedReader()
var line = reader.readLine()
while(line!=null){
    array+=line
    line = reader.readLine()
}
array.flatMap(_.split(" "))
    .map((_,1))
    .groupBy(_._1)
    .map(x=> (x._1,x._2.size))
    .toList
    .sortBy(_._1)
    .foreach(println)

reader.close()

更多精彩内容关注

微信公众账号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值