文档章节

第十章 Scala 容器基础(二十五):使用Range来填充一个集合

阿拉德大陆的魔法师
 阿拉德大陆的魔法师
发布于 2016/04/19 11:25
字数 602
阅读 1115
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Problem

    你想要使用Range来填充一个List,Array,Vector或者其他的sequence。

Solution

    对于支持range方法的集合你可以直接调用range方法,或者创建一个Range对象然后把它转化为一个目标集合。

    在第一个解决方案中,我们调用了伴生类的range方法,比如Array,List,Vector,ArrayBuffer等等:

scala> Array.range(1, 10)
res83: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> List.range(1, 10)
res84: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> Vector.range(0, 10, 2)
res85: scala.collection.immutable.Vector[Int] = Vector(0, 2, 4, 6, 8)

    对于一些集合,比如List,Array,你也可以创建一个Range对象,然后把它转化为相应的目标集合:

scala> val a = (1 to 10).toArray
a: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> val l = (1 to 10) by 2 toList
warning: there were 1 feature warning(s); re-run with -feature for details
l: List[Int] = List(1, 3, 5, 7, 9)

scala> val l = (1 to 10).by(2).toList
l: List[Int] = List(1, 3, 5, 7, 9)

    我们来看看那些集合可以由Range直接转化的:

def toArray: Array[A]
def toBuffer[A1 >: Int]: Buffer[A1]
def toIndexedSeq: IndexedSeq[Int]
def toIterator: Iterator[Int]
def toList: scala.List[Int]
def toMap[T, U]: collection.Map[T, U]
def toParArray: ParArray[Int]
def toSet[B >: Int]: Set[B]
def toStream: Stream[Int]
def toTraversable: collection.Traversable[Int]
def toVector: scala.Vector[Int]

    使用这种方案我们可以把Range转为Set等,不支持range方法的集合类:

scala> val set = Set.range(0, 5)
<console>:8: error: value range is not a member of object scala.collection.immutable.Set
       val set = Set.range(0, 5)
                     ^

scala> val set = Range(0, 5).toSet
set: scala.collection.immutable.Set[Int] = Set(0, 1, 2, 3, 4)

scala> val set = (0 to 10 by 2).toSet
set: scala.collection.immutable.Set[Int] = Set(0, 10, 6, 2, 8, 4)

    你也可以创建一个字符序列:

scala> val letters = ('a' to 'f').toList
letters: List[Char] = List(a, b, c, d, e, f)

scala> val letters = ('a' to 'f' by 2).toList
letters: List[Char] = List(a, c, e)

    Range还能用于for循环:

scala> for(i <- 0 until 10 by 2) println(i)
0
2
4
6
8

Discussion

    通过对Range使用map方法,你可以创建出了Int,char之外,其他元素类型的集合

scala> val l = (1 to 3).map(_ * 2.0).toList
l: List[Double] = List(2.0, 4.0, 6.0)

    使用同样的方案,你可以创建二元祖集合:

scala> val t = (1 to 5).map(e => (e, e*2))
t: scala.collection.immutable.IndexedSeq[(Int, Int)] = Vector((1,2), (2,4), (3,6), (4,8), (5,10))

    二元祖集合很容易转换为Map:

scala> val map = t.toMap
map: scala.collection.immutable.Map[Int,Int] = Map(5 -> 10, 1 -> 2, 2 -> 4, 3 -> 6, 4 -> 8)


© 著作权归作者所有

阿拉德大陆的魔法师
粉丝 27
博文 91
码字总数 83019
作品 0
西城
程序员
私信 提问
第十章 Scala 容器基础(二十四):给集合创建一个懒加载视图

Problem 你正在使用一个巨大的集合,并且想创建一个懒加载的版本。只有在计算或者返回结果时才真正被调用。 Solution 除了Stream类,不论什么时候你创建一个Scala集合类的实例,你都创建了一...

阿拉德大陆的魔法师
2016/04/18
178
0
第十章 Scala 容器基础(七):用Vector作为你指定的不可变序列

问题: 你需要为你的Scala应用选择一个快速,通用的不可变序列集合类型,那么该如何选择呢? 解决: Vecotr类目前可以被认为是这么一个通用的不可变数据结构。Vector是一个带索引的不可变序列...

阿拉德大陆的魔法师
2016/04/10
1K
0
第十章 Scala 容器基础(十二):使用Iterators

Problem 你需要在你的应用中使用iterator。 Solution 尽管使用带有hasNext()和next()方法的iterator是非常通用的遍历Java集合的方法。但是它们在Scala集合中并不经常被使用。因为Java集合有许...

阿拉德大陆的魔法师
2016/04/12
397
0
第十章 Scala 容器基础(五):确定集合类型(范型)

解决方案: 我们先来看一个例子,如果你不制定集合类型,那么Scala会自动给List指定一个Double类型 scala> val l = List(1, 2.0, 33D, 400L)l: List[Double] = List(1.0, 2.0, 33.0, 400.0) ...

阿拉德大陆的魔法师
2016/04/10
101
0
第十章 Scala 容器(二):如何选择一个合适的容器类

解决方案 实际上Scala的容器分为三大类:Seq,Map,Set。Seq容器线性地存储了元素,这些元素或者被以数组加索引的形式存储,或者使用链表的方式存储。Map存储的是键值对,当你想用(key-val...

阿拉德大陆的魔法师
2016/04/01
532
0

没有更多内容

加载失败,请刷新页面

加载更多

密码加密与微服务鉴权JWT详细使用教程

[TOC] 1.1、了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性。 什么是无状态? 1.服务端不保存任何客户端请求者信...

庭前云落
18分钟前
6
0
Xamarin.FormsShell基础教程(9)Shell相关类体系

Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类。Shell类实现了大多数应用程序所需的基本UI功能的页面。除此以外,常用的类还有ShellContent、Tab、Fly...

大学霸
20分钟前
4
0
聊聊MVC、MVP、MVVM吧

先来介绍下本文结构: 三种框架的具体概念 在安卓开发上的写法、优缺点 1.概念 1.1 MVC MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模...

二营长的意大利炮手
37分钟前
4
0
如果解释Python,什么是.pyc文件?

我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”。 这些来自哪里? #1楼 Python代码经历了两个阶段。 第...

javail
42分钟前
4
0
.NET Core初览

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算 TODO

梦想游戏人
45分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部