第十章 Scala 容器基础(十五):使用flatten方法来展开一个元素为集合的集合
2016-04-12 00:00
621 查看
摘要: flatten方法可以展开一个嵌套集合List(List(1,2,3),List(4,5,6))
使用flatten方法来展开一个潜逃集合:
就像你看到的,flatten方法如其名,把嵌套集合内部的集合展开成为单层集合。flatten方法不只能展开List嵌套,还能应用于其它集合比如Array、ArrayBuffer、Vector等。
我们来看一个真实的用例,需求是我们要给所有参加婚礼的夫妻打印一个邀请函,每对夫妻每人一份邀请函,并且邀请函的名字首字母要大写:
flatten方法还有至少两个非常有用的地方,第一个是,你可以把一个字符串的集合展开为一个字符集合,应为字符串本身就是字符的集合:
第二,因为Option类型可以被认为是一个容器,里面包含0个活着1个元素,flatten方法是非常有效的对于Some和None组成的集合。它可以展开Some元素形成一个新的集合,同时去掉None元素。
Problem
如何把一个嵌套集合展开为一个平铺的单层集合。Solution
使用flatten方法来吧一个嵌套集合转化为一个单层集合。为了说明这一点,我们先来创建一个嵌套结合撸啊撸scala> val lol = List(List(1,2), List(3,4)) lol: List[List[Int]] = List(List(1, 2), List(3, 4))
使用flatten方法来展开一个潜逃集合:
scala> val result = lol.flatten result: List[Int] = List(1, 2, 3, 4)
就像你看到的,flatten方法如其名,把嵌套集合内部的集合展开成为单层集合。flatten方法不只能展开List嵌套,还能应用于其它集合比如Array、ArrayBuffer、Vector等。
scala> val a = Array(Array(1,2), Array(3,4)) a: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4)) scala> a.flatten res7: Array[Int] = Array(1, 2, 3, 4)
我们来看一个真实的用例,需求是我们要给所有参加婚礼的夫妻打印一个邀请函,每对夫妻每人一份邀请函,并且邀请函的名字首字母要大写:
scala> val couples = List(List("kim", "al"), List("julia", "terry")) couples: List[List[String]] = List(List(kim, al), List(julia, terry)) scala> couples.flatten.map(_.capitalize) res8: List[String] = List(Kim, Al, Julia, Terry)
flatten方法还有至少两个非常有用的地方,第一个是,你可以把一个字符串的集合展开为一个字符集合,应为字符串本身就是字符的集合:
scala> val list = List("Hello", "world") list: List[String] = List(Hello, world) scala> list.flatten res9: List[Char] = List(H, e, l, l, o, w, o, r, l, d)
第二,因为Option类型可以被认为是一个容器,里面包含0个活着1个元素,flatten方法是非常有效的对于Some和None组成的集合。它可以展开Some元素形成一个新的集合,同时去掉None元素。
scala> val x = Vector(Some(1), None, Some(3), None) x: scala.collection.immutable.Vector[Option[Int]] = Vector(Some(1), None, Some(3), None) scala> x.flatten res10: scala.collection.immutable.Vector[Int] = Vector(1, 3)
相关文章推荐
- Windows下Scala环境搭建
- C#中GraphicsPath的Flatten方法用法实例
- Rails Routes中new、collection、member的区别浅析
- 解决 The Controls collection cannot be modified because the control contains code blocks
- Windows7下安装Scala 2.9.2教程
- java Collection 之List学习介绍
- Python中Collection的使用小技巧
- java Collection 之Set使用说明
- Scala代码实现列出Hadoop 文件夹下面的所有文件
- ClassNotFoundException:scala.PreDef$
- sbt创建web项目
- XML 文件解析--含Unicode字符的XML文件
- Scala 学习随笔
- Scala 小程序记录(学习期间的代码片段)
- 分分钟掌握快速排序(Java / Scala 实现)
- Scala极速入门
- Spark初探
- 集合操作(一)ArrayList,LinkedList源码分析
- Scala实现REST操作
- Scala method call syntax