scala数组

scala中的数组分为定长数组(Array)和可变长数组(ArrayBuffer)

定长数组(Array):
1.声明

a.利用Array类中定义的apply方法直接声明

scala> val arr = Array("leon","ada","jill")
arr: Array[String] = Array(leon, ada, jill)

如果为空数组则数据类型默认为Nothing

scala> val arr6 = Array()
arr6: Array[Nothing] = Array()

b.类似java中的声明方法,需要初始化数组长度

scala> val arr7 = new Array(4)
arr7: Array[Nothing] = Array(null, null, null, null)

默认的数据类型也是Nothing

也可以定义数据类型

scala> val arr7 = new Array(4)
arr7: Array[Nothing] = Array(null, null, null, null)

注明:如果声明数组中的元素类型不同,则数组类型取他们的公共父类

scala> val arr3 = Array("kris",30)
arr3: Array[Any] = Array(kris, 30)

2.访问元素
使用()访问数组中元素对应的下角标

scala> println(arr(2))
jill

3.修改元素

scala> arr(2) = "wilson"

scala> println(arr(2))
wilson

4.元素类型判断和转换

scala> val arr3 = Array("kris",30)
arr3: Array[Any] = Array(kris, 30)

scala> val name = arr3(0).asInstanceOf[String]
name: String = kris

scala> val age = arr3(1).asInstanceOf[Int]
age: Int = 30

scala> print(s"name: ${name}, age: ${age}")
name: kris, age: 30

scala> val flag = arr3(1).isInstanceOf[Int]
flag: Boolean = true

可变长数组(ArrayBuffer):
1.声明

需要导包

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val arr4 = ArrayBuffer[String]()
arr4: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()

2.添加去除元素

scala> arr4 += "joey"
res3: arr4.type = ArrayBuffer(joey)

scala> arr4 -= "joey"
res9: arr4.type = ArrayBuffer()

3.添加去除数组

scala> arr4 ++= arr
res4: arr4.type = ArrayBuffer(joey, leon, ada, jill)

scala> arr4 --= arr
res10: arr4.type = ArrayBuffer(joey)

4.常用方法

insert:在数组某个地方插入一个或者多个元素

scala> arr4.insert(1,"cris")

scala> arr4
res6: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(joey, cris, leon, ada, jill)

scala> arr4.insert(2,"yasuo","mangsen")

scala> arr4
res8: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(joey, cris, yasuo, mangsen, leon, ada, jill)

remove:与insert使用方法相同,作用相反,为去除删除元素

scala> arr4.remove(2)
res11: String = mangsen

scala> arr4
res12: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(cris, yasuo)

scala> arr4.remove(0,2)

scala> arr4
res14: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()

注意:删除单个元素的时候返回的是删除的那个元素

补充:
a.ArrayBuffer与Array的区别:
1.ArrayBuffer是变长的,Array是定长的
2.ArrayBuffer使用是需要导包
3.Array类似与java中的数组,ArrayBufffer类似于java中的ArrayList
4.一般在构造数组的时候采用ArrayBuffer,不用考虑数组长度,添加删除元素也很方便,在使用的时候一般转化为Array来查询,至于为什么,也不是很清楚,猜测在底层的数据结构上Array占用的内存空间较少?且通过下角标访问元素效率更高?总之先学会怎么用,后面再深入研究数据结构吧

b.ArrayBuffer与Array之间转化:
通过toArray和toBuffer方法,比较方便

scala> val arr = Array(1,2,3)
arr: Array[Int] = Array(1, 2, 3)

scala> arr.toBuffer
res24: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)

scala> res24.toArray
res25: Array[Int] = Array(1, 2, 3)

c.构造多维数组:
一般实际使用中一二维数组最常用,二维数组以上的不常见

构造二维数组:
scala> val arr2 = Array(Array(1,'a'),Array(2,'b'),Array(3,'c'))
arr2: Array[Array[Int]] = Array(Array(1, 97), Array(2, 98), Array(3, 99))

scala> val arr2:Array[Array[Any]] = Array(Array(1,'a'),Array(2,'b'),Array(3,'c'))
arr2: Array[Array[Any]] = Array(Array(1, a), Array(2, b), Array(3, c))

scala> print(arr2(1)(1))
b

或者通过数组的方法ofDim构造
如构造一个2行3列的多维字符串数组:

scala> val arr3 = Array.ofDim[String](2,3)
arr3: Array[Array[String]] = Array(Array(null, null, null), Array(null, null, null))

d.数组的遍历
三种方法:map for foreach

scala> arr4
res36: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(koea, hello, scala)

scala> arr4.map(e => {
     | println("name is " + e)
     | })
name is koea
name is hello
name is scala
res34: scala.collection.mutable.ArrayBuffer[Unit] = ArrayBuffer((), (), ())

scala> for(i <- 0 until arr4.length) println(s"name is ${arr4(i)}")
name is koea
name is hello
name is scala

scala> for(i <- arr4) println(s"name is ${i}")
name is koea
name is hello
name is scala

scala> arr4.foreach(e => println(s"name is ${e}"))
name is koea
name is hello
name is scala

e.yield方法构造新的集合

scala> arr
res39: Array[Int] = Array(1, 2, 3)

scala> val arrNew = for (i <- arr)  yield i * 2
arrNew: Array[Int] = Array(2, 4, 6)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一时兴起,想写点什么,但不知从何说起。大千世界,为什么最终悲剧的效果会那么的震撼人心,让我们久久不能自拔​,沉迷其...
    雾都Ren阅读 319评论 0 3
  • 昔日推敲月下门,今日细较数字真。 寒瘦苦吟得一字,金线衣裳算几分?
    爰为阅读 452评论 7 13
  • 总是这样,莫名的有种不想坚持自己计划的感觉,二,就是这样一个状态吧!
    妖树阅读 69评论 0 0
  • 白菜萝卜各有所爱 每个人都会有自己的爱好,总有自己喜欢的东西,也总有自己的讨厌的东西,总有一些回忆不愿意去回忆,总...
    朱家朱少阅读 478评论 0 0