尾递归:

如果一个函数为内置函数并且是尾递归的方式,可以在函数前面添加@tailrec。相当于告诉编译器我这个函数是尾递归函数,然后

编译器会对这个函数进行一些操作,把递归化解出来。

Array.newBuilder

创建一个不定长的数组,然后依次往数组里面加数,最后封起来,就可以使用Array.newBuilder .

  val A = Array.newBuilder[Int]//创建一个不定长数组AA += 2//给A加一个数,数值为2val B = A.result()//这样B是一个数组,内容为{2}A += 3//给A加一个数,数值为3val C = A.result()//这样C是一个数组,内容为{2,3}

二维数组重点是二维数组的创建方式:  val csvArray = Array.newBuilder[Array[String]]

package com.qifun.csvParserUtilimport com.qifun.csvParser.CsvReader
import java.io.File
import scala.annotation.tailrec/** 实现将CsvAsArray的数据结构转化成scala的二维数组* 封装了两个函数* getValue(a),得到第a行的数据* getValue(a,b),得到第a行b列的数据*/
class CsvAsArray(csvReader: CsvReader) {val csvArray = searchCsvArray()val highLength = csvArray.lengthval wideLength = if (highLength > 0) csvArray(0).length else 0def getValue(a: Int, b: Int): String = {if ((a < highLength) && (b < wideLength)) csvArray(a)(b)else throw new Exception("out of range!")}def getValue(a: Int): Array[String] = {if (a < highLength) csvArray(a)else throw new Exception("out of range!")}private def searchCsvArray(): Array[Array[String]] = {//把CsvAsArray的数据结构转化成scala的二维数组val iterator = csvReader.iterator                   //使用Array.newBuilderval csvArray = Array.newBuilder[Array[String]]      //学习尾递归的用法@tailrec def getCsvLine() {if (iterator.hasNext) {csvArray += iterator.next()getCsvLine()}}getCsvLine()csvArray.result()}
}

scala-尾递归,Array.newbuilder,二维数组相关推荐

  1. numpy.array的二维数组拼接做法

    对于多维数据,如何拼接, 如何存进array 数组里面,实现做法如下: y1 = np.array([[1, 2, 3], [4, 5, 6]])y2 = np.concatenate(((y1, [ ...

  2. 【DaVinci Developer专题】-13-Array IDT中使用Array定义“二维数组”类型(Implementation Data Type)

    共11页 目录 1 创建一个Array IDT(Implementation Data Type) 2 创建了一个S/R Port Interface 3 导入CFG生成代码的总结 4 结尾 < ...

  3. php二维数组按照自定义方式对键值排序,PHP 对一个给定的二维数组按照指定的键值进行排序...

    $v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); ...

  4. 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )

    文章目录 一.一维数组形参退化 二.二维数组形参退化 三.数组形参等价关系 一.一维数组形参退化 C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int ar ...

  5. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  6. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

  7. C/C++如何传递二维数组?

    用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). ----------------------------- ...

  8. php 二维数组中去重,PHP实现二维数组去重功能示例

    PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...

  9. 《剑指Offer》——二维数组中的查找(JZ1)C++

    文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...

  10. php 冒泡排序数组,php一维二维数组键之冒泡排序

    php一维二维数组键之冒泡排序 功能:对数组进行重新排序. 说明:冒泡排序 (一维数组)(二维数组某个健排序) 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据 ...

最新文章

  1. Tensorflow— saver_restore
  2. 富数据控件 GridView(定义列、格式化、样式)
  3. python多包运行_如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?...
  4. Activity功能控件
  5. python三大主流框架的对比
  6. 商务智能之绩效管理 Performance Management
  7. 关于寻路算法的一些思考(2):Heuristics 函数
  8. Magicodes.IE 2.5版本发布
  9. #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  10. android实现号码归属地,Android 如何获取手机号码归属地
  11. 再谈Bellman-Ford
  12. Linux系统性能监控工具Glances
  13. C++ 重制植物大战僵尸(Cocos2dx开源项目)
  14. Lattice PCIe 学习 1
  15. android手机和包支付,中国移动和包支付客户端下载-和包支付appv9.7.16 安卓版-腾牛安卓网...
  16. 第八题:输出 9*9 乘法口诀表
  17. Python绘图Turtle库画圈
  18. 二阶线性微分器的实现
  19. summernote富文本中上传图片并保存到Oracle数据库的问题解决
  20. 电脑某个磁盘空间不够,想进行磁盘扩展

热门文章

  1. Django7-4.模板系统常用知识点(4)
  2. 量化分析师的Python日记【第3天:一大波金融Library来袭之numpy篇】
  3. 批处理是什么?能干什么?
  4. 挂件巡检机器人_一“人”分饰多角 京东新一代巡检机器人上岗!
  5. 计算机杰出天才:阿兰·图灵 谜样的大师
  6. 外贸企业邮箱用哪个好?免费企业邮箱和收费企业邮箱哪个更好用?
  7. 大数据技术课堂小笔记
  8. Teamcenter、TIA Portal、NX MCD是如何结合在一起的
  9. 《不只是美:信息图表设计原理与经典案例》—— 第2章 形式与功能:可视是一种技术...
  10. dnsmasq.conf配置