scala 学习第二章 函数
来源:互联网 发布:网络教育本科毕业条件 编辑:程序博客网 时间:2024/06/11 09:16
一 变长参数 函数
实现一个可变长度参数列表 函数,举例如下:
def sum(args:Int*) = { var result =0 for(arg<- args) result +=arg result }
函数得到的是一个类型为Seq的参数,但是不能直接传入Seq。比如如下的写法是错误的
var s = sum(1 to 5)
解决这个问题的方法是告诉编译器你希望这个参数被当做参数序列处理。追加 :_*,比如
var s =sum(1 to 5:_*)
二 过程
Scala对于不返回值的函数有特殊的表示法。如果 函数体包含在花括号中但没有前面的等号 =,那么返回类型就是Unit。这样的函数被称为过程(procedure),由于不返回值,我们可以省略等号。
三 数组
3.1 长度不变的数组
如果需要一个长度不变的数组,可以使用Scala中的Array
val nums = new Array[Int](10) //长度为10的定长数组,所有元素初始化为0
val s =Array("Hello","Array") //已经提供初始值,就不需要new
3.2 变长数组:数组缓冲
对于那种长度按需变化的数组,java有ArrayList,Scala的等效数据结构是ArrayBuffer.
一个空的缓冲区,准备存放数据
val b = ArrayBuffer[Int]() //或者 new ArrayBuffer[Int]用+=在尾端添加元素
b+=1 //ArrayBuffer(1)在尾端添加多个元素,用括号包起来
b+=(1,2,35) //ArrayBuffer(1,1,2,3,5)移除尾端元素
b.trimEnd(5) //ArrayBuffer(1,1,2,5)在缓冲数组的尾端添加或移除元素是一个高效的操作,但是在任意位置插入或移除元素并不高效。因为这之后的所有元素都需要平移。比如:
b.insert(2,6)有时候你需要构建一个Array,但不知道最终需要装多少元素。这时,先构建一个数组缓冲,然后调用
b.toArray反过来,调用a.toBuffer可以将一个数组a转换成一个数组缓冲
3.3 遍历数组和数组缓冲
以下是for 循环遍历数组或缓冲数组的语法
for(i< -0 until a.length) println(i+","+a(i))
变量 i的取值从0 到a.length-1。注意 0 until 10实际上是调用 0.until(10)
如果想要每两个元素一跳,可以让i 这样遍历
0 until (a.length,2)如果想从数组的尾端开始,遍历的写法如下
(0 until a.length).reverse如果在数组不需要用到数组下标,可以如下方式访问数组
for (elem<-a ) printf(elem)
3.4 常用算法
Scala内建函数。
运算函数
Array(10,13,-9).sum //对ArrayBuffer同样适用
ArrayBuffer("Mary","had","little").max //littlesorted方法将数组或数组缓冲排序并返回排序后的数组或数组缓冲,但是不会修改原始版本
val b = ArrayBuffer(1,7,2,9)val bSorted = b.sorted(_<_) //b没有改变
3.5 多维数组
举例来说,Double的二维数组类型为Array[Array[Double]]。要构造这样一个数组,可以用 ofDim方法
val matrix = Array.ofDim[Double](3,4) //三行,四列
matrix(row)(column) = 42
0 0
- scala 学习第二章 函数
- scala学习第二章 控制结构与函数
- 第二课、Scala函数
- Scala学习整理[第二章 入门Ⅰ]<Programming In Scala>
- Scala学习第二天
- scala学习第二弹:函数式编写思想
- scala函数式编程第二章之函数(1)
- scala函数式编程第二章之函数(2)
- Scala学习第二天:Scala函数定义、流程控制、异常处理入门实战
- Scala学习第二天 Scala函数定义、流程控制、异常处理
- Scala学习第二天 Scala函数定义、流程控制、异常处理
- Scala学习笔记--第3章 函数
- scala 函数学习
- scala学习之函数
- Scala函数学习
- scala学习1--函数
- scala学习(4)-函数
- Scala学习四: 函数
- ajax 实现 JavaScript与jsp数据的传递
- java知识结构树
- 大型数据库技术1
- 欢迎使用CSDN-markdown编辑器
- HDU1532 - Drainage Ditches(网络流)
- scala 学习第二章 函数
- C++实现复数计算
- 字符串的定义、替换、比较、截取
- 谷歌推荐的图片加载框架--Glide的简单介绍
- 我们编程吧 之 python 学习手册0.75
- python logging 替代print 输出内容到控制台和重定向到文件
- 往文件中写入内容(代码示例)
- 网络编程_TCP_Socket通信原理_多个客户端_聊天室原理JAVA189-190
- Java 常见面试题整理