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

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表示除尾元素之外的剩余元素集合
时间: 2024-09-02 08:30:45

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

java-list集合中没有元素,可以继续调用方法吗?

问题描述 list集合中没有元素,可以继续调用方法吗? list集合中没有元素,可以继续调用方法吗?没有元素的意思是不是就是说这个集合=null 解决方案 集合不是null,如果你new 了一个出来,是一个实例,集合里面没有元素,list.size() 这样调用结果是0 .试一下 解决方案二: 集合不是null,如果你new 了一个出来,是一个实例,集合里面没有元素,list.size() 这样调用结果是0 .试一下 解决方案三: 这不是方法,或者方法中用到list可以做好逻辑判断就没问题 解决

怎么用最简单的代码取出一个集合中每个元素的第一项并排序?

问题描述 怎么用最简单的代码取出一个集合中每个元素的第一项并排序? 比如一个集合:{{GGGD}{BBYH}{DDQP}{AACC}{CCPL}{FFQW}}怎样取出每个元素中的第一项并排序?{ABCDEFG} 解决方案 python实现:使用dict保存集合数据 取出所有key存到list中 使用sorted方法对list排序

Python通过递归遍历出集合中所有元素的方法_python

本文实例讲述了Python通过递归遍历出集合中所有元素的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: '''''通过递归遍历出集合中的所有元素 Created on 2013-9-29 @author: L.Eric '''  def print_List(list_nums):      for each_item in list_nums :           if isinstance(each_item,list):              print_Lis

C#实现在foreach中删除集合中的元素

C#实现在foreach中删除集合中的元素 1 2 3 4 5 6 7 8 List<string> str = new List<string>(); str.Add( "zs"); str.Add("ls"); str.Add( "ws" ); foreach(string s in str) {    str.Remove(s); } 有时候我们在foreach中需要修改或者删除集合 可是这时候却报如下错误:集合已修

如何删除JAVA集合中的元素

经常我们要删除集合中的某些元素.有些可能会这么写. public void operate(List list){ for (Iterator it = list.iterator(); it.hasNext();) { String str = (String)it.next(); if (str.equals("chengang")){ list.remove(str); } } } 这种写法一运行 就会报 如下异常: Exception in thread "main&

Java函数式编程(四):在集合中查找元素_java

查找元素 现在我们对这个设计优雅的转化集合的方法已经不陌生了,但它对查找元素却也是无能为力.不过filter方法却是为这个而生的. 我们现在要从一个名字列表中,取出那些以N开头的名字.当然可能一个也没有,结果可能是个空集合.我们先用老方法实现一把. 复制代码 代码如下: final List<String> startsWithN = new ArrayList<String>(); for(String name : friends) { if(name.startsWith(&

另类的方式访问Set集合中的元素

今天我的同学问了关于访问Set集合的元素问题,由于Set是无序的集合,所以不能根据下标去直接访问,需要进行一些处理,主要方法是将Set集合转换成数组 下面是代码 Java代码 package org.aiy.test; import java.util.HashSet; import java.util.Set; public class Test { /** * @param args */ public static void main(String[] args) { Set<Intege

foreach遍历如何筛选集合中的元素?

问题描述 请问使用foreach遍历长度为55的集合,如何实现若第5位及以后值为0则不输出,集合元素长度相同,打算用for循环但还没想好如何实现?求大神帮助,不胜感激.... 解决方案 解决方案二:你用linq,或者用一个变量,在each内部+1操作,判断这个变量值是否等于5,或者就用for循环解决方案三:不是的,我利用C#采集到长度为55的集合,但是从第五位以后才是有用的,想实现若从第5为到最后一位若值全为0,则不输出.解决方案四:那你直接用for循环就好了,何必用foreach呢.for循环

java去除集合中重复元素示例分享 java去除重复_java

复制代码 代码如下: class ArrayListTest1 {    public static void main(String[] args) {        ArrayList al = new ArrayList();        al.add("java03");        al.add("java03");        al.add("java01");        al.add("java02")