一、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数组和集合的更多相关文章

  1. Scala数组| 集合

    arrays :+ 5尾部   头部5 +: arrays TODO 声明不可变数组,不能删; 默认情况下,scala中集合的声明全都是不可变的 val arrays: Array[Int] = Ar ...

  2. Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合

    前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...

  3. 大数据学习day15----第三阶段----scala03--------1.函数(“_”的使用, 函数和方法的区别)2. 数组和集合常用的方法(迭代器,并行集合) 3. 深度理解函数 4 练习(用java实现类似Scala函数式编程的功能(不能使用Lambda表达式))

    1. 函数 函数就是一个非常灵活的运算逻辑,可以灵活的将函数传入方法中,前提是方法中接收的是类型一致的函数类型 函数式编程的好处:想要做什么就调用相应的方法(fliter.map.groupBy.so ...

  4. Programming In Scala笔记-第十七章、Scala中的集合类型

    本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...

  5. scala的多种集合的使用(1)之集合层级结构与分类

    一.在使用scala集合时有几个概念必须知道: 1.谓词是什么? 谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值. 例如:下面方法返回true或者false, ...

  6. Spark记录-Scala数组

    Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合.数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用. 可以声明一个数组变量,例如:numbers,使 ...

  7. 3、scala数组

    一.Array .Array Buffer 1.Array 在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组. 此外,由于Scala与Java都是运行在JVM中,双方可以互 ...

  8. 4、scala数组

    1.Array 2.ArrayBuffer 3.遍历Array和ArrayBuffer 4.数组常见操作 1.  Array Scala中,array代表的含义与java类似,也是长度不可改变的数组. ...

  9. Scala 数组和List

    Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer ob ...

随机推荐

  1. UIView的几个枚举定义

    UIView是iOS开发最主要的视图,非常多控件都是继承它,掌握当中的几个基本枚举定义,有利益理解视图的载入和參数差别. 一.UIViewAnimationCurve UIView的基本动画变化规律 ...

  2. 阿里云ACE下的PHP开发环境搭建

    阿里云ACE下的PHP开发环境搭建 本系列文章由ex_net(张建波)编写.转载请注明出处. http://blog.csdn.net/ex_net/article/details/23999053 ...

  3. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校.补多校的题目.刷一下一直薄弱的DP.多校假设有计算几何一定要干掉-.- 题意:给 ...

  4. android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)

    这个特性是andorid4.4支持的,最少要api19才干够使用.以下介绍一下使用的方法,很得简单: 添加一个demo源代码: https://github.com/ws123/StatusDemo ...

  5. jQuery异步请求模拟IE登录网站

    具体请求的登录验证页面后台逻辑处理,这里我们忽略,不在我们的学习范围内:关键的是使用jQuery异步请求方法,如下例子: <%@ Page Language="C#" Aut ...

  6. Sqlserver2005:深入了解php执行sqlserver存储过程procedure:odbc_exe、odbc_execute

    以下存储过程(伪代码): -- 伪代码,假设相关操作是成功的 alter procedure pr_test as begin set nocount on update tab set col='n ...

  7. YARN的设计

    YARN:下一代 Hadoop 计算平台 我们现在稍微改变一下用辞.以下名称的改动有助于更好地了解 YARN 的设计: ResourceManager 代替集群管理器 ApplicationMaste ...

  8. 使用NSTimer实现动画

    1.新建empty AppLication,添加HomeViewController页面, iphone.png图片 2.在 HomeViewController.xib中添加Image View,并 ...

  9. Android 在界面中显示以及输入文本信息 TextView和EditText

    Android控件之TextView和EditTextTextView:显示文本框控件EditText:输入文本框TextView和EditText的常用属性TextView控件的常用属性androi ...

  10. django restframework 教程之Serialization(序列化)

    介绍 本教程将会通过创建一个简单的粘贴代码项目,突出显示WebAPI,过程中,会介绍组成REST框架的各种组件,让你全面了解如何配合使用. 环境设置 建议使用virtualenv建立新的虚拟环境,确保 ...