scala编程第16章学习笔记(2)
转换列表:toIterator, toArray,copyToArray
List类的toArray方法将递归存放的列表转换为连续存放的数组
Array类的toList方法将连续存放的数组转换为递归存放的列表
scala> val arr = abcde.toArray
arr: Array[Char] = Array(a, b, c, d, e) scala> arr.toList
res24: List[Char] = List(a, b, c, d, e)
copyToArray方法可以把列表元素复制到目标数组的一段连续空间。
操作为:xs copyToArray (arr, start)
把列表xs的所有元素复制到数组arr中,填入位置开始为start。必须确保目标数组arr有足够的空间可以放下全部的列表元素。
scala> val arr2 = new Array[Int](10)
arr2: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) scala> List(1, 2, 3) copyToArray (arr2, 3) scala> arr2
res27: Array[Int] = Array(0, 0, 0, 1, 2, 3, 0, 0, 0, 0)
如果需要用枚举器访问列表元素,可以使用toIterator方法:
scala> val it = abcde.toIterator
it: Iterator[Char] = non-empty iterator scala> it.next
res28: Char = a scala> it.next
res29: Char = b
举例:二路归并排序
object MergeSort extends App {
/**
* @author DELL
* 二路归并排序算法
*
*/
def msort[T] (less: (T, T) => Boolean) //less为比较函数
(xs: List[T]): List[T] = {
/**
* @param xs 要合并的有序列表
* @param ys 要合并的有序列表
* @return 合并后的列表
*/
def merge(xs: List[T], ys: List[T]): List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xsl, y :: ysl) =>
if (less(x, y)) x :: merge(xsl, ys)
else y :: merge(xs, ysl)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n //把要排序的列表xs平均分成两个列表
merge(msort(less)(ys), msort(less)(zs)) //先对分后的两个列表归并排序,再对排好的有序表进行归并
}
}
}
运行实例:
1.正序排列
scala> msort((x: Int, y: Int) => x < y) (List (5, 7, 1, 3))
res0: List[Int] = List(1, 3, 5, 7)
2.倒序排列
scala> val reversemsort=msort((x: Int, y: Int) => x > y) _
reversemsort: List[Int] => List[Int] = <function1> scala> reversemsort(List(5, 7, 3, 1))
res3: List[Int] = List(7, 5, 3, 1)
scala编程第16章学习笔记(2)的更多相关文章
- scala编程第16章学习笔记(3)——List类的高阶方法
列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...
- scala编程第16章学习笔记(1)
List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得 ...
- scala编程第16章学习笔记(4)——List对象的方法
通过元素创建列表:List.apply List(1, 2, 3) 等价于List.apply(1, 2, 3): scala> List.apply(1, 2, 3) res0: List[I ...
- scala编程第19章学习笔记(1)——类型参数化
一.queues函数式队列 函数式队列是一种具有以下三种操作方式的数据结构: head 返回队列的第一个元素. tail 返回除第一个元素之外的队列. scala> import scala.c ...
- scala编程第18章学习笔记——有状态的对象
银行账号的简化实现: scala> class BankAccount{ | private var bal: Int = 0 | def balance: Int = bal | def de ...
- scala编程第17章学习笔记(4)——元组
元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...
- scala编程第17章学习笔记(3)
可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...
- scala编程第17章学习笔记(1)——集合类型
列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...
随机推荐
- 如何使用DSP的cache(转)
C6747在执行一块算法的执行时间在114ms左右,需求要20ms以下.6000属于分层存储器体系架构,内部RAM跟CPU不同频运行,只有cache使能才跟CPU同频.可能是cache没打开.下面转载 ...
- 001.Git简介与安装
一 git介绍 1.1 概述 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放 ...
- Android- SharedPreferences 使用详解
Android-SharedPreferences 使用详解 参考 https://developer.android.google.cn/reference/android/content/Shar ...
- WEP自动破解工具wesside-ng
WEP自动破解工具wesside-ng wesside-ng是aircrack-ng套件提供的一个概念验证工具.该工具可以自动扫描无线网络,发现WEP加密的AP.然后,尝试关联该AP.关联成功后, ...
- 项目冲刺Second
Second Sprint 1.各个成员今日完成的任务 蔡振翼:完成管理员界面 谢孟轩:完成用户界面 林凯:完成登录界面 肖志豪:完成主界面 吴文清:创建数据库 刘华强:完成连接数据库,编写查询语句 ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉
Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...
- OpenJ_POJ C16B Robot Game 打表找规律
Robot Game 题目连接: http://acm.hust.edu.cn/vjudge/contest/122701#problem/B Description Sgeoghy has addi ...
- shu_1016 栈
cid=1079&pid=2">http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=2 分析: Ca ...
- TCPIP网络协议层对应的RFC文档
原文地址:TCPIP网络协议层对应的RFC文档作者:西木 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data ...
- HDU 4568 SPFA + TSP
这道题是长沙邀请赛的题,当时是道签到题. 这种题还是很常见的,讲一下思路. 首先是预处理出每个宝藏之间的距离,还有到边的距离,直接对每个宝藏进行一次SPFA就可以了. 然后就是经典的求TSP的过程. ...