59.scala编程思想笔记——列表和递归
2016-01-04 21:59
204 查看
59.scala编程思想笔记——列表和递归
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458713
源码下载连接请见第一篇笔记。
在几乎所有情况下,都应该选择Vector作为序列容器,因为会以最高效的方式执行大多数操作。有时,Scala 会选择List.
如下:
scala>Seq(1,3,5,7)
res1: Seq[Int] = List(1, 3, 5, 7)
List针对称为递归的特殊类型的操作进行了优化。在递归中,对序列的第一个元素执行操作,然后在操作内部调用同一个方法,并将序列中剩余的部分传递给该方法。
例如:
def rPrint(s:Seq[Char]):Unit = {
print(s.head)
if(s.tail.nonEmpty)
rPrint(s.tail) // Recursive call
}
rPrint("Recursion")
执行输出如下:
Recursion
其中head调用返回第一个元素,而tail会产生剔除第一个元素后的剩余序列。
递归求和如下:
import com.atomicscala.AtomicTest._
def sumIt(toSum:List[Int], sum:Int=0):Int =
if(toSum.isEmpty)
sum
else
sumIt(toSum.tail, sum + toSum.head)
sumIt(List(10, 20, 30, 40, 50)) is 150
不过在,Scala的集合中有一个内建的sum,其实可以无需编写sumIt,如下:
import com.atomicscala.AtomicTest._
List(10, 20, 30, 40, 50).sum is 150
Vector(10, 20, 30, 40, 50).sum is 150
Seq(10, 20, 30, 40, 50).sum is 150
Set(10, 20, 30, 40, 50, 50, 50).sum is 150
(10 to 50 by 10).sum is 150
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50458713
源码下载连接请见第一篇笔记。
在几乎所有情况下,都应该选择Vector作为序列容器,因为会以最高效的方式执行大多数操作。有时,Scala 会选择List.
如下:
scala>Seq(1,3,5,7)
res1: Seq[Int] = List(1, 3, 5, 7)
List针对称为递归的特殊类型的操作进行了优化。在递归中,对序列的第一个元素执行操作,然后在操作内部调用同一个方法,并将序列中剩余的部分传递给该方法。
例如:
def rPrint(s:Seq[Char]):Unit = {
print(s.head)
if(s.tail.nonEmpty)
rPrint(s.tail) // Recursive call
}
rPrint("Recursion")
执行输出如下:
Recursion
其中head调用返回第一个元素,而tail会产生剔除第一个元素后的剩余序列。
递归求和如下:
import com.atomicscala.AtomicTest._
def sumIt(toSum:List[Int], sum:Int=0):Int =
if(toSum.isEmpty)
sum
else
sumIt(toSum.tail, sum + toSum.head)
sumIt(List(10, 20, 30, 40, 50)) is 150
不过在,Scala的集合中有一个内建的sum,其实可以无需编写sumIt,如下:
import com.atomicscala.AtomicTest._
List(10, 20, 30, 40, 50).sum is 150
Vector(10, 20, 30, 40, 50).sum is 150
Seq(10, 20, 30, 40, 50).sum is 150
Set(10, 20, 30, 40, 50, 50, 50).sum is 150
(10 to 50 by 10).sum is 150
相关文章推荐
- php随手记
- 58.scala编程思想笔记——序列
- matlab2013b调用cpp文件,mex,VS2013配置问题
- C语言中,头文件和源文件的关系(转)
- django-simple-captcha 使用 以及添加动态ajax刷新验证
- java读取/写入属性文件
- Java 泛型具体解释
- 用代码判断大小端
- 第4讲C语言程序初体验-练习
- python 编程小实例(2) 四则运算小游戏
- c#与c++交互
- Arrays.asList() 返回的list不能add,remove以及慎用java.util.Collections.copy()方法
- 设计模式学习笔记--装饰者模式(Decorator Pattern)
- Java中父类和子类关于构造方法和私有属性的几个问题
- c#与c++类型对应
- Java正则表达式-语法与示例
- java socket学习笔记
- c/c++常见的排序算法
- 【C++ OpenGL ES 2.0编程笔记】4: 纹理贴图-图片叠加效果实现
- Java知识点汇总