开发者社区> 许鹏> 正文

Scala: Range & 实现集合中相邻元素间的差值

简介: Scala中Range可以看成是List的特例,Range的包含的元素类型是Int, 本文介绍如何创建Range。代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找。 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a,b,c,d)中(b-a,c-
+关注继续查看

Range

欢迎转载,转载请注明出处,徽沪一郎。

概要

Scala中Range可以看成是List的特例,Range的包含的元素类型是Int, 本文介绍如何创建Range

Range创建

方法一:

val r1 = new Range(1,10,1)

方法二:

val r1 = 1 to 10

需要注意的是,默认步长是1

可以使用by来改变步长

val r1 = 1 to 10 by 2

to和until的区别,to是将结束的元素也算在内是<=,而until是不包括结束元素是<

应用

最容易想到的是与for相结合。

for ( i <- 1 to 10 by 2 ) yield i*3

在实际项目中,可能需要将某一范围内的值放在一个线程中处理,那么可以使用range来进行控制。

用Scala实现集合中相邻元素间的差值

欢迎转载,转载请注明出处,徽沪一郎。

概要

代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找。

今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a,b,c,d)中(b-a,c-b,d-c)

解法

val l1 = 1 to 10 toList
val l2 = l1.tail
l1.zip(l2).map(p=>(p._2 - p._1)

上述代码即可求出两两差值。代码含义稍作解释:

  1. tail表示一个集合中除首元素外的剩余元素,也是一个集合。
  2. zip将两个集合组成一个数值对集合,比如原来有两个集合分别是(a,b,c,d), (1,2,3,4),使用zip之后,形成((a,1),(b,2),(c,3),(d,4))
  3. map操作中的p._1和p._1表示tuple中的第一个元素和第二个元素

衍生

既然讲了首元素和剩余元素,肯定要讲到其对立面。分别引述如下

  • head|tail  head表示头元素,tail表示除head之外的剩余元素集合
  • init|last    last表示尾元素, init表示除尾元素之外的剩余元素集合

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29215 0
【CSS】获取元素的z-index值以及各种值的意义
js可以获取其元素的z-index值: $("document").ready(function(){ var a = $('.row').css('z-index'); alert(a); }); 对于值的解读: 值 描述 auto 默认。
1073 0
C# 遍历List 并删除某个元素
1、我们选择用for循环, for(int i=0;i {      if(list[i])     {         list.
1217 0
停止去人性化吧 SOC应找回人的元素
本文讲的是停止去人性化吧 SOC应找回人的元素,如果你身在安全界,你怎么描述你的工作?如果你没在安全界,你怎么描述安全?
1113 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20725 0
STL中用erase()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。
1034 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23590 0
+关注
39
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载