前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala专题系列(三):Scala数组

Scala专题系列(三):Scala数组

作者头像
用户5252199
发布2022-04-18 13:54:35
7050
发布2022-04-18 13:54:35
举报
文章被收录于专栏:大数据技术博文
一 : 定长数组

如果我们需要声明一个长度不变的数组,可以用scala中的Array,比如:

val nums = new Array[Int](10) // 声明一个容量为10个整数的数组,所有元素的初始化为0 val strs = new Array[String](10) // 声明一个容量为10个字符串的数组,所有元素的初始化为null val arr = Array("hello","world") // 声明一个长度为Array[String] -- 类型是推断出来的 , 如果在声明中已经提供了初始值就不需要new

在JVM中,Scala的Array是以Java数组方式实现,上述中的数组在JVM中的类型为java.lang.String[] , Int,Double或其它与java中基本类型对应数组都是基本类型数组,Array(1,2,3,4,5) 在JVM中就是一个Int[]

二 :变长数组:数组缓冲

对于变长数组,Java中有ArrayList Scala中的等效数据结构为ArrayBuffer

import scala.collection.mutable.ArrayBuffer

val b = ArrayBuffer[Int]() // 或者new ArrayBuffer[Int] 一个空的数组缓冲,准备存放整数

b += 1

b += (2,3,4,,5) // 在尾端添加多个元素,以括号括起来

b ++= Array(13,14,15) // 也可以用++=操作符追加任何集合

b.trimEnd(5) // 移除最后5个元素

我们可以在数组的任意位置插入或者移除元素,但这样的操作并不那么高效(在数组缓冲的尾端添加或移除元素是一种高效的操作)

b.insert(2,4) // ArrayBuffer(1,2,2,3,4,5) 在下标2之前插入

b.insert(2,3,4,5,6) // 在下标2前插入任意多的元素

将数组缓冲转换为Array b.toArray

反之 将a.toBuffer 可以将一个数组转换为数组缓冲 b.toBuffer

三:遍历数组和数组缓冲

在scala 中处理数组的方式如下:

for( i <- 0 until a.length ) println( i + ":" + a(i) )

变量i的取值从0到a.length-1

util是RechInt类的方法,返回所有小于(但不包括)上限的数字,比如

0 util 10 返回的是 Range(0,1,2,3,4,5,6,7,8,9)

数组转换

在Scala中对数组进行转换时很简单的,这些转换不会修改原始数组,而是产生一个全新的数组

val a = Array(2,3,5,7,11)

val Result = for(elem <- a ) yield 2 * elem // result是Array(4,6,8)

for(...)yield 循环创建了一个类型与原始集合相同的新集合

也可以用另外一种写法来实现

a.filter(_ % 2 == 0).map{2 * _}

或者

a.filter { _ % 2 == 0 } map{ 2 * _ }

四 :数组常用算法

在Scala中有内置的函数来处理一些业务运算中的求和与排序

Array( 1,3,4,5 ).sum // 13 对ArrayBuffer同样适用

要使用sum方法,元素类型必须是数值类型,要么是整型,要么是浮点数或者BigInteger、BigDecimal

同样 Min和max 输出数组或数组缓冲中最大和最小元素

ArrayBuffer("a","aa","aaa").max // "aaa"

sorted 方法将数组或数组缓存排序并返回经过排序的数组或者数组缓冲,这个过程并不会修改原始版本

val b = ArrayBuffer(1,5,3,2)

val bSorted = b.sorted(_ < _) // b 并没有被修改,bsorted是ArrayBuffer(1,2,3,5)

如果想要显示数组或数组缓冲的内容,可以用mkString方法,它允许你指定元素之间的分隔符

a.mkString(" , ")

五:多维数组

和java一样,多维数组是通过数组的数组来实现的,举例来说,Double的二维数组类型为Arry[Array[Double]]

加入要构造这样的数组,可以用ofDim方法:

val matrix = Array.ofDim[Double](3,4) // 三行,四列

要访问其中的元素,可以使用两对圆括号

matrix(row)(column) = 42

也可以创建不规则的数组,每一行的长度各不相同

val truangle = new Array[Array[Int]](10)

for(i <- 0 util triangle.length)

triangle(i) = new Array[Int](i + 1)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术博文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档