Scala School-2-集合

基本数据结构

  • 数组Array

数组本身的元素是有序的,可重复的,可变的;

val numbers = Array(1,2,3,4,5)
numbers(1)
numbers(1) = 6
numbers

numbers: Array[Int] = Array(1, 6, 3, 4, 5)
res702: Array[Int] = Array(1, 6, 3, 4, 5)
  • 列表List

列表本身的元素是有序的,可重复的,不可变的

val numbers = List(1,2,3,4,5)
numbers(1)
numbers(1) = 6
numbers

<console>:33: error: value update is not a member of List[Int]
       numbers(1) = 6
  • 集合Set

集合本身的元素是无序的,不可重复的,不可变的

scala> val numbers = Set(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
numbers: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
  • 元组Tuple

简单的逻辑集合

scala> val hostPort = ("localhost", 80)
hostPort: (String, Int) = (localhost, 80)

元组不通过index,而是根据下标来读取对象,而且下标起点为1,而不是0;

元组还有一个特殊的生成形式

scala> 1->2
res704: (Int, Int) = (1,2)

这个看起来就和Map的元素一样了,确实也是。

  • 映射Map

可以用->,也可以用元组形式来生成。

scala> Map(1->2)
res705: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> Map((1,2))
res710: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> Map((1,2))==Map(1->2)
res711: Boolean = true
  • Option

一个容器,其中有可能有包含的值;

scala> val numbers = Map("one" -> 1, "two" -> 2)
numbers: scala.collection.immutable.Map[java.lang.String,Int] = Map(one -> 1, two -> 2)
scala> numbers("one")
res712: Int = 1
scala> numbers("one1")
java.util.NoSuchElementException: key not found: one1
scala> numbers.get("123")
res714: Option[Int] = None
scala> numbers.get("one")
res715: Option[Int] = Some(1)

如果想要获得Map中的元素,直接调取元素可能会有exception,如果key错误的话;
但使用get就更安全,找不到就返回一个Option,其中可能有值Some(1),也可能没有None;

函数组合子(Functional Combinators)

这个概念就复杂多了。要精通短期来讲有点困难。。

组合子是一个概念,将复杂事物简单化的逻辑概念。

这个世界是数学概念组成的。

这句话可能大家比较能接受了吧。那换做这一句呢?

这个世界是函数组成的。

这个可能有点绕。那么将所有数学中的概念对应为函数。

概念:常数函数
公理:函数值为真的命题函数,y=f(x)=true
推理:上述函数组合而成的新函数,正确的话也为true

这个概念在此不需要理解太深(我觉得,也许是愚见:))。只需要记得,我们可以将一切事物转化成函数的形式。那么这么做的好处是?

我们可以把复杂的事情简单化,就像是:

expectedResult(x) = a(b(c(d(e...(x)))))

这里a,b,c...都是函数。

也就是说,我们对于某个基础内容x,可以进行一系列的操作,从而达到目的。典型的函数组合子如下(边学边理解吧,用文字比较难以形成感觉)。

  • map

对列表的每一个元素应用一个函数,所以map这个函数本身是针对列表类型的,接受的参数为一个函数,f = element => trans_element,返回[trans_element]列表。

  • foreach

和上面类似,但是它本身不会返回任何值,从而无法作为一种可链接的函数。它的作用需要取决于其参数函数的side effect。

  • filter

参数函数是element => boolean的,也就是对每个元素做一个判断,符合条件的留下,否则舍弃。这种返回boolean值的函数也叫做谓词函数

  • zip

合并两个列表,返回合并后的新列表。

  • partition

接受一个谓词函数作为参数函数,返回[true_result, false_result]的分割列表。

  • find

接受一个谓词函数作为参数函数,返回第一个true的元素。

  • foldLeft/foldRight
def foldLeft [B] (z: B)(f: (B, A) => B): B//z需要提供,作为起步的初始值
def reduceLeft [B >: A] (f: (B, A) => B): B//特例,签名要求B是A的子类

从左往右,依次计算/更新结果B。比如List(1,2,3),从左往右求和,即:
List(1,2,3).reduceLeft(_ + _)
List(1,2,3).tail.foldLeft(List(1,2,3).head)(_ + _)

  • flatten

将复合nested结构扁平化。

scala> Array(Array(1,2), Array(3,4,5)).flatten
res122: Array[Int] = Array(1, 2, 3, 4, 5)
  • flatMap

先map再flatten。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容