scala的多种集合的使用(5)之数组Array(ArrayBuffer)的操作
1.创建和更新数组的不同方式
1)定义一个数组的初始大小和类型,随后填充值。
- scala> val array = new Array[String](3)
- array: Array[String] = Array(null, null, null)
- scala> array(0) = "abc"
- scala> array(1) = "def"
- scala> array(2) = "hij"
- scala> array
- res66: Array[String] = Array(abc, def, hij)
2)创建指向数组的var引用,然后赋值给它。
- scala> var fruits: Array[String] = _
- fruits: Array[String] = null
- scala> fruits = Array("apple","orange","banana")
- fruits: Array[String] = [Ljava.lang.String;@79a73e5e
- scala> fruits
- res67: Array[String] = Array(apple, orange, banana)
3)集合混合类型组成。
- scala> val x =Array(1,2.0,33D,400L)
- x: Array[Double] = Array(1.0, 2.0, 33.0, 400.0)
4)集合混合类型组成,可以有自己控制。下面的例子的数组保持了原有数组的类型。
- scala> val x =Array[Number](1,2.0,33D,400L)
- x: Array[Number] = Array(1, 2.0, 33.0, 400)
5)range创建和填充数组。
- scala> val x = Array.range(1,10)
- x: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
- scala> val x = Array.range(1,10,2)
- x: Array[Int] = Array(1, 3, 5, 7, 9)
6)fill创建和填充数组。
- scala> val x = Array.fill(3)("hello")
- x: Array[String] = Array(hello, hello, hello)
7)tabulate创建和填充数组。
- scala> val x = Array.tabulate(5)(i => i * i)
- x: Array[Int] = Array(0, 1, 4, 9, 16)
8)将list集合转化为数组的形式。
- scala> val x = List(1,2,3,4,5).toArray
- x: Array[Int] = Array(1, 2, 3, 4, 5)
9)将字符串转化为数组的形式。
- scala> "hello".toArray
- res68: Array[Char] = Array(h, e, l, l, o)
10)通过()的索引,就可以访问对应的元素。
- scala> val x = Array(1,3,4,5,7,9)
- x: Array[Int] = Array(1, 3, 4, 5, 7, 9)
- scala> x(0)
- res70: Int = 1
- scala> x(3)
- res71: Int = 5
11)更新数组就是把访问的元素给到一个值即可完成更新。
- scala> x(3) = 30
- scala> x
- res73: Array[Int] = Array(1, 3, 4, 30, 7, 9)
2.创建大小可变的数组(ArrayBuffer)
1)Array是可变的,因为它的内容可以改变,但是其大小是不能进行改变的。想要创建一个大小和值都可变的索引序列,可以使用ArrayBuffer。
- scala> import scala.collection.mutable.ArrayBuffer
- import scala.collection.mutable.ArrayBuffer
- scala> var x = ArrayBuffer[String]()
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()
- scala> x += "aa"
- res74: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa)
- scala> x += "bb"
- res75: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb)
- scala> x += "cc"
- res76: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb, cc)
- scala> x
- res77: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb, cc)
2)可以在创建ArrayBuffer时就添加元素,之后继续添加。
- scala> val x = collection.mutable.ArrayBuffer("aa","bb")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb)
- scala> x += "cc"
- res78: x.type = ArrayBuffer(aa, bb, cc)
3)可以使用++=添加元素到数组中去。
- scala> val x = collection.mutable.ArrayBuffer("aa","bb")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb)
- scala> x ++= Seq("dd","ee")
- res79: x.type = ArrayBuffer(aa, bb, dd, ee)
4)可以使append方法添加元素到数组中去。
- scala> val x = collection.mutable.ArrayBuffer("aa","bb")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb)
- scala> x.append("ww","oo","pp")
- scala> x
- res81: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(aa, bb, ww, oo, pp)
3.删除Array和ArrayBuffer中的元素
1)使用-=删除一个或者多个元素。
- scala> import scala.collection.mutable.ArrayBuffer
- import scala.collection.mutable.ArrayBuffer
- scala> val x = ArrayBuffer("c","d","a","e","f")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(c, d, a, e, f)
- scala> x -= "a"
- res82: x.type = ArrayBuffer(c, d, e, f)
- scala> x -= ("c","d")
- res83: x.type = ArrayBuffer(e, f)
2)使用--=删除定义在另一个集合中的多个元素。
- scala> val x = ArrayBuffer("c","d","a","e","f")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(c, d, a, e, f)
- scala> x --= Seq("a","c")
- res84: x.type = ArrayBuffer(d, e, f)
- scala> x --= Array("d")
- res85: x.type = ArrayBuffer(e, f)
- scala> x --= Set("f")
- res86: x.type = ArrayBuffer(e)
3)根据ArrayBuffer中元素的位置使用remove删除元素,或者根据开始位置删除一系列的元素。
- scala> import scala.collection.mutable.ArrayBuffer
- import scala.collection.mutable.ArrayBuffer
- scala> val x = ArrayBuffer("c","d","a","e","f")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(c, d, a, e, f)
- scala> x.remove(0)
- res0: String = c
- scala> x
- res1: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(d, a, e, f)
- scala> x.remove(1,3)
- scala> x
- res3: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(d)
4)clear方法可以删除数组中的所有元素。
- scala> import scala.collection.mutable.ArrayBuffer
- import scala.collection.mutable.ArrayBuffer
- scala> val x = ArrayBuffer("c","d","a","e","f")
- x: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(c, d, a, e, f)
- scala> x.clear
- scala> x
- res5: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()
5)定义数组变量var,通过过滤的方式删除元素,重新将结果赋给自己。
- scala> var a = Array("apple","orange","banana")
- a: Array[String] = Array(apple, orange, banana)
- scala> a = a.take(2)
- a: Array[String] = [Ljava.lang.String;@405223e4
- scala> a
- res6: Array[String] = Array(apple, orange)
4.数组的排序
将一个数组或者ArrayBuffer中的元素进行排序。如果正在使用的是一个包含隐式排序元素的Array,可以使用scala.util.Sorting.quickSort方法对该Array进行排序。
- scala> val x = Array("cherry","apple","banana")
- x: Array[String] = Array(cherry, apple, banana)
- scala> scala.util.Sorting.quickSort(x)
- scala> x
- res8: Array[String] = Array(apple, banana, cherry)
- scala> val x = Array(2,4,1,9,5,7)
- x: Array[Int] = Array(2, 4, 1, 9, 5, 7)
- scala> scala.util.Sorting.quickSort(x)
- scala> x
- res10: Array[Int] = Array(1, 2, 4, 5, 7, 9)
5.创建多维数组
1)使用Array.ofDim方法创建所需要的数组。
- scala> val rows = 2
- rows: Int = 2
- scala> val cols = 3
- cols: Int = 3
- scala> val x = Array.ofDim[String](rows,cols)
2)给多维数组添加元素。
- scala> x(0)(0) = "a"
- scala> x(0)(1) = "b"
- scala> x(0)(2) = "c"
- scala> x(1)(0) = "d"
- scala> x(1)(1) = "e"
- scala> x(1)(2) = "f"
- scala> x
- res17: Array[Array[String]] = Array(Array(a, b, c), Array(d, e, f))
3)根据索引的具体位置访问元素。
- scala> val a = x(1)(1)
- a: String = e
用for循环遍历数组的元素:
- scala> for {
- | i <- 0 until rows
- | j <- 0 until cols
- | } println(s"($i)($j) = ${x(i)(j)}")
- (0)(0) = a
- (0)(1) = b
- (0)(2) = c
- (1)(0) = d
- (1)(1) = e
- (1)(2) = f
4)创建三维数组。
- scala> val x,y,z = 3
- x: Int = 3
- y: Int = 3
- z: Int = 3
- scala> val a = Array.ofDim[Int](x,y,z)
- a: Array[Array[Array[Int]]] = Array(Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0,0, 0), Array(0, 0, 0), Array(0, 0, 0)))
- scala> for {
- | i <- 0 until x
- | j <- 0 until y
- | z <- 0 until z
- | } println(s"($i)($j)($z) = ${a(i)(j)(z)}")
- (0)(0)(0) = 0
- (0)(0)(1) = 0
- (0)(0)(2) = 0
- (0)(1)(0) = 0
- (0)(1)(1) = 0
- (0)(1)(2) = 0
- (0)(2)(0) = 0
- (0)(2)(1) = 0
- (0)(2)(2) = 0
- (1)(0)(0) = 0
- (1)(0)(1) = 0
- (1)(0)(2) = 0
- (1)(1)(0) = 0
- (1)(1)(1) = 0
- (1)(1)(2) = 0
- (1)(2)(0) = 0
- (1)(2)(1) = 0
- (1)(2)(2) = 0
- (2)(0)(0) = 0
- (2)(0)(1) = 0
- (2)(0)(2) = 0
- (2)(1)(0) = 0
- (2)(1)(1) = 0
- (2)(1)(2) = 0
- (2)(2)(0) = 0
- (2)(2)(1) = 0
- (2)(2)(2) = 0
scala的多种集合的使用(5)之数组Array(ArrayBuffer)的操作的更多相关文章
- scala的多种集合的使用(4)之列表List(ListBuffer)的操作
1.List列表的创建和添加元素 1)最常见的创建list的方式之一. scala> val list = 1 :: 2 :: 3 :: Nil list: List[Int] = List(1 ...
- scala的多种集合的使用(6)之映射Map的操作方法
1.创建映射 1)创建不可变的映射 scala> val status = Map(1 -> "a",2 -> "b") status: sc ...
- scala的多种集合的使用(1)之集合层级结构与分类
一.在使用scala集合时有几个概念必须知道: 1.谓词是什么? 谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值. 例如:下面方法返回true或者false, ...
- scala的多种集合的使用(3)之遍历集合的方法
遍历集合的方法 1.用foreach循环遍历一个集合 foreach接收一个函数作为参数.定义的函数应该接收一个元素作为输入参数,然后不要返回任何的东西.输入的参数的类型应该匹配集合中的类型.随着fo ...
- scala的多种集合的使用(2)之集合常用方法
一.常用的集合方法 1.可遍历集合的常用方法 下表列出了Traverable在所有集合常用的方法.接下来的符号: c代表一个集合 f代表一个函数 p代表一个谓词 n代表一个数字 op代表一个简单的操作 ...
- scala的多种集合的使用(8)之队列和栈的操作方法
1.使用队列 队列是一种那个先进先出的队列.1)创建一个队列. scala> import scala.collection.mutable.Queue import scala.collect ...
- scala的多种集合的使用(7)之集Set的操作方法
1.给集添加元素 1)用+=.++=和add给可变集添加元素. scala> var set = scala.collection.mutable.Set[Int]() set: scala.c ...
- scala学习笔记-集合
变长数组:数组缓冲 Scala中对于那种长度会变的数组的数据结构为ArrayBuffer. import scala.collection.mutable.ArrayBuffer; // 一个空的数组 ...
- Programming In Scala笔记-第十七章、Scala中的集合类型
本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...
随机推荐
- C语言ftell()函数
ftell()函数返回指定流的当前文件指针的位置.在文件末尾移动文件指针后,我们可以使用ftell()函数获取文件的总大小.可以使用SEEK_END常量来将文件指针移动文件末尾. ftell()函 ...
- AI - TensorFlow - 过拟合(Overfitting)
过拟合 过拟合(overfitting,过度学习,过度拟合): 过度准确地拟合了历史数据(精确的区分了所有的训练数据),而对新数据适应性较差,预测时会有很大误差. 过拟合是机器学习中常见的问题,解决方 ...
- string类的几种方法
string str="123abc456";int i=3;1 取字符串的前i个字符 str=str.Substring(0,i); // or str=str.Remov ...
- 【Python3爬虫】大众点评爬虫(破解CSS反爬)
本次爬虫的爬取目标是大众点评上的一些店铺的店铺名称.推荐菜和评分信息. 一.页面分析 进入大众点评,然后选择美食(http://www.dianping.com/wuhan/ch10),可以看到一页有 ...
- 强化学习(二)马尔科夫决策过程(MDP)
在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素.但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简化也很重要,这一篇主要就是讲如何利用马尔科夫决策 ...
- parsing:NLP之chart parser句法分析器
已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于简单英语语法的chart句法分 ...
- 使用 EOLINKER 进行接口测试的最佳路径 (下)
本文为 <使用 EOLINKER 进行接口测试的最佳路径> 下半部分文章,主要介绍测试脚本如何执行和报告生成,以及测试项目人员如何协作.还没看过上篇文章请戳 使用 EOLINKER 进行接 ...
- Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件
前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...
- keil进阶教程
前言 keil只懂得创建软件工程是远远不够的,如果要想顺心使用,应该要懂得部分配置,这样使用心情顺畅,码代码也会越发高效. 设置字号字体 编辑点击编辑菜单,会出现很多子目录,找到配置,点击进入设置页面 ...
- 【Oracle学习笔记】序列
Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方,一般结合触发器使用. Sequence是数据库系统的特性,有的数据库有Sequen ...