Scala数组和集合
一、scala数组
数组定义1: var arr = new Array[String](3)
String:存储的元素类型
3:存储3个元素
添加元素: arr(1) = "hello"
数组定义2: val arr1 = Array[Int](1,2,3,4,5,6)
改变内容:arr1(1) = 18
添加元素:arr1 += 22 长度不可以改变
二、数组方法
1、map(映射)
映射: 2 4 6
映射关系:f(x) = x*5
对应映射关系:10 20 30
例:
scala> var arr = Array(1,2,3)
arr: Array[Int] = Array(1, 2, 3) scala> arr.map((x: Int) => x * 10)
res12: Array[Int] = Array(10, 20, 30) scala> arr
res13: Array[Int] = Array(1, 2, 3) scala> res12
res14: Array[Int] = Array(10, 20, 30)
2、flatten(扁平化操作)
scala> var arr = Array("hello Beijing","hello China")
arr: Array[String] = Array(hello Beijing, hello China)
scala> arr.length
res6: Int = 2
scala> arr.map(_.split(" "))
res7: Array[Array[String]] = Array(Array(hello, Beijing), Array(hello, China))
scala> arr.map(_.split(" ")).flatten
res8: Array[String] = Array(hello, Beijing, hello, China)
3、flatMap(相当于先map操作再flatten)
scala> arr
res9: Array[String] = Array(hello Beijing, hello China) scala> arr.flatMap(_.split(" "))
res10: Array[String] = Array(hello, Beijing, hello, China)
4、foreach(遍历数组中的元素)
scala> res10.foreach(x => println(x))
hello
Beijing
hello
China scala>
5、GroupBy(分组)
scala> arr
res13: Array[String] = Array(hello Beijing, hello China) scala> arr.flatMap(_.split(" ")).groupBy(x => x)
res14: scala.collection.immutable.Map[String,Array[String]] = Map(Beijing -> Array(Beijing), China -> Array(China), hello -> Array(hello, hello)) //Scala简易WordCount
scala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length))
res16: scala.collection.immutable.Map[String,Int] = Map(Beijing -> 1, China -> 1, hello -> 2)
6、sortBy(排序)
scala> arr
res13: Array[String] = Array(hello Beijing, hello China)
//正序
scala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length)).toList.sortBy(x => x._2)
res18: List[(String, Int)] = List((Beijing,1), (China,1), (hello,2))
//倒序
scala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length)).toList.sortBy(x => -x._2)
res19: List[(String, Int)] = List((hello,2), (Beijing,1), (China,1))
三、集合
scala集合有两种类型:可变mutable
不可变Immutable
val b = List(2,4,6)
不可变集合:内容不可变(数组内容可改变)
长度不可变
可变集合:
注意:需要导包
import scala.collection.mutable._
val buff = ArrayBuffer(2,3,4)
内容可变: buff(1) = 300
长度可变:buff += 200
例:
scala> val s = List(1,2,3)
s: List[Int] = List(1, 2, 3) scala> s(1) = 8
<console>:13: error: value update is not a member of List[Int]
s(1) = 8
^ scala> val b = List(2,3,4)
b: List[Int] = List(2, 3, 4) scala> b += 20
<console>:13: error: value += is not a member of List[Int]
b += 20
^ scala> import scala.collection.mutable._
import scala.collection.mutable._ scala> val buff = ArrayBuffer(2,3,4)
buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 3, 4) scala> buff += 200
res23: buff.type = ArrayBuffer(2, 3, 4, 200) scala> buff(1) = 300 scala> buff
res25: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 300, 4, 200) scala> scala.collection.mutable.
AVLIterator History PriorityQueueProxy
AVLTree ImmutableMapAdaptor Publisher
AbstractBuffer ImmutableSetAdaptor Queue
AbstractIterable IndexedSeq QueueProxy
AbstractMap IndexedSeqLike ResizableArray
AbstractSeq IndexedSeqOptimized RevertibleHistory
AbstractSet IndexedSeqView Seq
AnyRefMap Iterable SeqLike
ArrayBuffer LazyBuilder Set
ArrayBuilder Leaf SetBuilder
ArrayLike LinearSeq SetLike
ArrayOps LinkedEntry SetProxy
ArraySeq LinkedHashMap SortedSet
ArrayStack LinkedHashSet Stack
BitSet LinkedList StackProxy
Buffer LinkedListLike StringBuilder
BufferLike ListBuffer Subscriber
BufferProxy ListMap SynchronizedBuffer
Builder LongMap SynchronizedMap
Cloneable Map SynchronizedPriorityQueue
DefaultEntry MapBuilder SynchronizedQueue
DefaultMapModel MapLike SynchronizedSet
DoubleLinkedList MapProxy SynchronizedStack
DoubleLinkedListLike MultiMap Traversable
FlatHashTable MutableList TreeSet
GrowingBuilder ObservableBuffer Undoable
HashEntry ObservableMap UnrolledBuffer
HashMap ObservableSet WeakHashMap
HashSet OpenHashMap WrappedArray
HashTable PriorityQueue WrappedArrayBuilder scala> val lb = scala.collection.mutable.ListBuffer(11,22,33)
lb: scala.collection.mutable.ListBuffer[Int] = ListBuffer(11, 22, 33) scala> lb(1) = 334 scala> lb += 222
res27: lb.type = ListBuffer(11, 334, 33, 222) scala> lb
res28: scala.collection.mutable.ListBuffer[Int] = ListBuffer(11, 334, 33, 222)
四、长度可变的数组
创建长度可变数组:
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 + 字符串的拼接
++ 两个集合相加
++: 合并集合
.+: 头部追加元素
:+ 尾部追加元素
::: 两个集合相加
count 统计个数
filter 过滤
sortBy 排序
sortWwith 排序
grouped 分组
fold 折叠
foldLeft 左折叠
foldRight 右折叠
reduce 聚合
aggregate 先局部聚合再全局聚合
zip 拉链
sum 求和
例:
scala> import scala.collection.immutable._
import scala.collection.immutable._ scala> Nil
res30: scala.collection.immutable.Nil.type = List() scala> val l = List(2,1,5,8,9)
l: List[Int] = List(2, 1, 5, 8, 9) scala> l.head
res31: Int = 2 scala> l.tail
res32: List[Int] = List(1, 5, 8, 9) scala> 5::Nil
res33: List[Int] = List(5) scala> val s = Nil
s: scala.collection.immutable.Nil.type = List() scala> 3::s
res34: List[Int] = List(3) scala> s
res35: scala.collection.immutable.Nil.type = List() scala> res34
res36: List[Int] = List(3) scala> 1::2::3::Nil
res37: List[Int] = List(1, 2, 3) scala> val ll = List(3,4,5)
ll: List[Int] = List(3, 4, 5) scala> ll + "a"
res38: String = List(3, 4, 5)a scala> ll
res39: List[Int] = List(3, 4, 5) scala> ll ++ List(6,7)
res40: List[Int] = List(3, 4, 5, 6, 7) scala> ll ++:List(6,7,8)
res41: List[Int] = List(3, 4, 5, 6, 7, 8) scala> ll
res42: List[Int] = List(3, 4, 5) scala> ll.+:(55)
res43: List[Int] = List(55, 3, 4, 5) scala> ll:+(66)
res44: List[Int] = List(3, 4, 5, 66) scala> ll
res45: List[Int] = List(3, 4, 5) scala> val lll = List(33,44)
lll: List[Int] = List(33, 44) scala> ll::lll
res46: List[Any] = List(List(3, 4, 5), 33, 44) scala> ll:::lll
res47: List[Int] = List(3, 4, 5, 33, 44) scala> ll
res48: List[Int] = List(3, 4, 5) scala> ll.count(x => x>4)
res49: Int = 1 scala> ll.count(x => x>=4)
res50: Int = 2 scala> ll.filter(x => x >+5)
<console>:19: error: value >+ is not a member of Int
ll.filter(x => x >+5)
^ scala> ll.filter(x => x >=5)
res52: List[Int] = List(5) scala> ll.filter(x => x >= 5)
res53: List[Int] = List(5) scala> val ls = List(6,2,1,3,8,7)
ls: List[Int] = List(6, 2, 1, 3, 8, 7) scala> ls.sortBy(x => x)
res54: List[Int] = List(1, 2, 3, 6, 7, 8) scala> ls.sortBy(x => -x)
res55: List[Int] = List(8, 7, 6, 3, 2, 1) scala> ls
res56: List[Int] = List(6, 2, 1, 3, 8, 7) scala> val sw = List(("h",2),("r",1),("m",4))
sw: List[(String, Int)] = List((h,2), (r,1), (m,4)) scala> sw.sortBy(x => x._2)
res57: List[(String, Int)] = List((r,1), (h,2), (m,4)) scala> sw.sortWith((x,y) => x._2 > y._2)
res58: List[(String, Int)] = List((m,4), (h,2), (r,1)) scala> val sw = List(("h",2),("r",2),("m",4))
sw: List[(String, Int)] = List((h,2), (r,2), (m,4)) scala> sw.groupd(2)
<console>:19: error: value groupd is not a member of List[(String, Int)]
sw.groupd(2)
^ scala> sw.grouped(2)
res60: Iterator[List[(String, Int)]] = non-empty iterator scala> sw.grouped(2).toList
res61: List[List[(String, Int)]] = List(List((h,2), (r,2)), List((m,4))) scala> val l2 = List(1,3,4)
l2: List[Int] = List(1, 3, 4) scala> l2.fold(0)((x,y) => x+y)
res62: Int = 8 scala> l2.fold(1)((x,y) => x+y)
res63: Int = 9 scala> l2.fold(2)((x,y) => x+y)
res64: Int = 10 scala> ls.fold(2)((x,y) => x-y)
res65: Int = -25 scala> ls
res66: List[Int] = List(6, 2, 1, 3, 8, 7) scala> l2.fold((x,y) => x-y)
<console>:19: error: missing parameter type
l2.fold((x,y) => x-y)
^
<console>:19: error: missing parameter type
l2.fold((x,y) => x-y)
^
<console>:19: error: missing argument list for method fold in trait TraversableOnce
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `fold _` or `fold(_)(_)` instead of `fold`.
l2.fold((x,y) => x-y)
^ scala> l2.fold(2)((x,y) => x-y)
res68: Int = -6 scala> l2.fold(2)(_+_)
res69: Int = 10 scala> l2.foldLeft(2)(_+_)
res70: Int = 10 scala> l2.foldRight(2)(_+_)
res71: Int = 10 scala> l2
res72: List[Int] = List(1, 3, 4) scala> l2.fold(0)(_ - _)
res73: Int = -8 scala> l2.foldRight(0)(_ - _)
res74: Int = 2 scala> l2.foldLeft(0)(_ - _)
res75: Int = -8 scala> l2
res76: List[Int] = List(1, 3, 4) scala> l2.reduce(_+_)
res77: Int = 8 scala> l2.reduce(_-_)
res78: Int = -6 scala> l2
res79: List[Int] = List(1, 3, 4) scala> l2.aggregate(0)(_+_,_+_)
res80: Int = 8 scala> val l3 = List(6,7,8)
l3: List[Int] = List(6, 7, 8) scala> l2.zip(l3)
res81: List[(Int, Int)] = List((1,6), (3,7), (4,8)) scala> val l3 = List(6,7,8,9)
l3: List[Int] = List(6, 7, 8, 9) scala> l2.zip(l3)
res82: List[(Int, Int)] = List((1,6), (3,7), (4,8)) scala> l2
res83: List[Int] = List(1, 3, 4) scala> l2.sum
res84: Int = 8
其中
scala> l2
res73: List[Int] = List(1, 3, 4) //相当于 1-(3-(4-0) 右折叠初始值在右
scala> l2.foldRight(0)(_ - _)
res74: Int = 2 //相当于 (0-1)-3)-4)
scala> l2.foldLeft(0)(_ - _)
res75: Int = -8
六、Set
无序的,不重复的集合
Set不可变的集合
val l5 = collection.mutable.HashSet(2,3,4)
HashSet可变的集合
remove 删除元素
-= 删除元素
++ 集合相加
++= 相加并赋值
例:
scala> val l4 = List(1,2,2,4)
l4: List[Int] = List(1, 2, 2, 4) scala> val s = Set(2,3,4)
s: scala.collection.immutable.Set[Int] = Set(2, 3, 4) scala> val s = Set(2,3,3,4)
s: scala.collection.immutable.Set[Int] = Set(2, 3, 4) scala> s += 5
<console>:19: error: value += is not a member of scala.collection.immutable.Set[Int]
s += 5
^ scala> collection.mutable.Hash
HashEntry HashMap HashSet scala> val l5 = collection.mutable.HashSet(2,3,4)
l5: scala.collection.mutable.HashSet[Int] = Set(2, 3, 4) scala> l5 += 6
res86: l5.type = Set(2, 6, 3, 4) scala> l5
res87: scala.collection.mutable.HashSet[Int] = Set(2, 6, 3, 4) scala> l5,remove(2)
<console>:1: error: ';' expected but ',' found.
l5,remove(2)
^ scala> l5.remove(2)
res88: Boolean = true scala> l5
res89: scala.collection.mutable.HashSet[Int] = Set(6, 3, 4) scala> l5 -= 3
res90: l5.type = Set(6, 4) scala> l4
res91: List[Int] = List(1, 2, 2, 4) scala> l5
res92: scala.collection.mutable.HashSet[Int] = Set(6, 4) scala> l4 ++ l5
res93: List[Int] = List(1, 2, 2, 4, 6, 4) scala> l5 ++= Set(2,7)
res94: l5.type = Set(2, 6, 7, 4)
七、Map
不可变Map:val m = Map[String,Int]("hello"->2,"world"->8)
可变Map:
getOrElse:如果有值返回值,没有返回默认值
例:
scala> val m = Map[String,Int]("hello"->2,"Beijing"->8)
m: scala.collection.immutable.Map[String,Int] = Map(hello -> 2, Beijing -> 8)
scala> m("hello")
res95: Int = 2
scala> m("hello") = 4
<console>:19: error: value update is not a member of scala.collection.immutable.Map[String,Int]
m("hello") = 4
^
scala> val m2 = collection.mutable.HashMap[String,Int]()
m2: scala.collection.mutable.HashMap[String,Int] = Map()
scala> m2.put("lisi",18)
res97: Option[Int] = None
scala> m2
res98: scala.collection.mutable.HashMap[String,Int] = Map(lisi -> 18)
scala> m2 += "weight" -> 120
res99: m2.type = Map(lisi -> 18, weight -> 120)
scala> m2.remove("lisi")
res100: Option[Int] = Some(18)
scala> m2
res101: scala.collection.mutable.HashMap[String,Int] = Map(weight -> 120)
scala> m2 -= "weight"
res102: m2.type = Map()
scala> m2
res103: scala.collection.mutable.HashMap[String,Int] = Map()
scala> m2 += "weight" -> 120
res104: m2.type = Map(weight -> 120)
scala> m2.get("weight")
res105: Option[Int] = Some(120)
scala> m2.getOrElse("zhangsan",18)
res106: Int = 18
scala> m2
res107: scala.collection.mutable.HashMap[String,Int] = Map(weight -> 120)
scala> m2 += "zhangsan" -> 28
res108: m2.type = Map(zhangsan -> 28, weight -> 120)
scala> m2.getOrElse("zhangsan",18)
res109: Int = 28
八、元组tuple
元组中可以是任意元素
val t = (2,true,"lisi",Unit)
取元素:t._1
对偶元组:有两个元素的元组
例:
scala> val t = (2,true,"lisi",Unit)
t: (Int, Boolean, String, Unit.type) = (2,true,lisi,object scala.Unit) scala> t
res110: (Int, Boolean, String, Unit.type) = (2,true,lisi,object scala.Unit) scala> t._1
res111: Int = 2 scala> t._3
res112: String = lisi scala> val t1 = ("lisi",18)
t1: (String, Int) = (lisi,18) scala> t1.swap
res113: (Int, String) = (18,lisi) scala> val t3 = Array(("lisi",18),("zhangsan",16))
t3: Array[(String, Int)] = Array((lisi,18), (zhangsan,16)) //求t3中的年龄的和
scala> t3.foldLeft(0)(_+_._2)
res114: Int = 34
Scala数组和集合的更多相关文章
- Scala数组| 集合
arrays :+ 5尾部 头部5 +: arrays TODO 声明不可变数组,不能删; 默认情况下,scala中集合的声明全都是不可变的 val arrays: Array[Int] = Ar ...
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...
- 大数据学习day15----第三阶段----scala03--------1.函数(“_”的使用, 函数和方法的区别)2. 数组和集合常用的方法(迭代器,并行集合) 3. 深度理解函数 4 练习(用java实现类似Scala函数式编程的功能(不能使用Lambda表达式))
1. 函数 函数就是一个非常灵活的运算逻辑,可以灵活的将函数传入方法中,前提是方法中接收的是类型一致的函数类型 函数式编程的好处:想要做什么就调用相应的方法(fliter.map.groupBy.so ...
- Programming In Scala笔记-第十七章、Scala中的集合类型
本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...
- scala的多种集合的使用(1)之集合层级结构与分类
一.在使用scala集合时有几个概念必须知道: 1.谓词是什么? 谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值. 例如:下面方法返回true或者false, ...
- Spark记录-Scala数组
Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...
- 3、scala数组
一.Array .Array Buffer 1.Array 在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组. 此外,由于Scala与Java都是运行在JVM中,双方可以互 ...
- 4、scala数组
1.Array 2.ArrayBuffer 3.遍历Array和ArrayBuffer 4.数组常见操作 1. Array Scala中,array代表的含义与java类似,也是长度不可改变的数组. ...
- Scala 数组和List
Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer ob ...
随机推荐
- Qt的窗口的最大化。
1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...
- 关于RSSI的问题
1.为什么RSSI是负值,其实归根到底为什么接收的无线信号是负值,这样子是不是容易理解多了.因为无线信号多为mW级别,所以对它进行了极化,转化为dBm而已,不表示信号是负的.1mW就是0dBm,小于1 ...
- php将汉字转换为拼音和得到词语首字母(三)
<?php function getfirstchar($s0){ $fchar = ord($s0{0}); if($fchar >= ord("A") and $f ...
- 关于MySQL的几个命令之load
1.记录当前操作命令
- EasyTouch的使用官方文档操作步骤
对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很 ...
- github前端资源
摘要: 本文将分享我在github上常用的一些插件,可能在开发中你会用到它,希望能够帮助你! 前端技术总结 url : https://github.com/JacksonTian/fks 简述: ...
- [kfaka] Apache Kafka:下一代分布式消息系统
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- SqlBulkCopy类进行大数据(10000万条以上)插入测试
好多天没写博客了,刚刚毕业一个多月,在IT的路上真是迷茫啊! 关于上一篇博客中提到的,在进行批量数据插入数据库的时候可以通过给存储过程传递一个类型为Table的参数进行相关操作,在这个过程中本人没有进 ...
- Java精选笔记_JavaBean
JavaBean组件 初始JavaBean JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类. 一个标准的JavaBean组件需要遵循一定的编码规范,具体如下 ...
- JAVA实现随机无重复数字功能
本文给大家介绍如何在JAVA中实现随机无重复数字的功能.如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到.包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题 ...