2021年大数据常用语言Scala(十四):基础语法学习 数组  重点掌握

举报
Lansonli 发表于 2021/09/28 23:32:38 2021/09/28
【摘要】 目录 数组  重点掌握 定长数组 变长数组 遍历数组 数组常用算法 数组  重点掌握 scala中数组的概念是和Java类似,可以用数组来存放一组数据。scala中,有两种数组,一种是定长数组,另一种是变长数组   定长数组 定长数组指的是数组的长度是不允许改变的数...

目录

数组  重点掌握

定长数组

变长数组

遍历数组

数组常用算法


数组  重点掌握

scala中数组的概念是和Java类似,可以用数组来存放一组数据。scala中,有两种数组,一种是定长数组,另一种是变长数组

 

定长数组

  • 定长数组指的是数组的长度不允许改变
  • 数组的元素可以改变

 

java中数组是根据类型来定义的比如 int[] String[]

在Scala中, 数组也是一个类, Array类, 存放的内容通过泛型来定义, 类似java中List的定义

语法

// 通过指定长度定义数组
val/var 变量名 = new Array[元素类型](数组长度)

// 用元素直接初始化数组
val/var 变量名 = Array(元素1, 元素2, 元素3...)

 

[!NOTE]

  • 在scala中,数组的泛型使用[]来指定(java <>)
  • 使用()来获取元素(java [])

这两点要注意, 不要混淆了

示例一

定义一个长度为100的整型数组

设置第1个元素为110

打印第1个元素

参考代码


  
  1. scala> val a = new Array[Int](100)
  2. a: Array[Int] = Array(0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
  3. scala> a(0) = 110
  4. scala> println(a(0))
  5. 110

 

 

示例二

定义一个包含以下元素的数组

  1. , "scala", "python"

获取数组长度

参考代码


  
  1. // 定义包含jave、scala、python三个元素的数组
  2. scala> val a = Array("java""scala""python")
  3. a: Array[String] = Array(java, scala, python)
  4. scala> a.length
  5. res17: Int = 3

为什么带初值的就不用new呢.

这里会用到一个apply方法, 我们后面会详细说.

我们现在只需要知道, 直接Array(1, 2, 3)来创建数组, 其实就是自动调用了Array类中的apply方法

apply方法做的事情就是, new array(3) 然后把3个元素放进去, 也就是这些工作自动帮我们做了.

大家先记住结论, 先会用, 后面我们学到面向对象的时候就会明白为什么啦

 

变长数组

变长数组指的是数组的长度是可变的,可以往数组中添加、删除元素

定义变长数组

创建变长数组,需要提前导入ArrayBuffer类import scala.collection.mutable.ArrayBuffer

 

语法

  • 创建空的ArrayBuffer变长数组,语法结构:

/var a = ArrayBuffer[元素类型]()

  • 创建带有初始元素的ArrayBuffer

/var a = ArrayBuffer(元素1,元素2,元素3....)

 

示例一

定义一个长度为0的整型变长数组

 

参考代码


  
  1. val a = ArrayBuffer[Int]()
  2. 为什么长度为0的就必须加泛型呢? 如果不加就是下面这样
  3. scala> val a1 = ArrayBuffer()
  4. a1: scala.collection.mutable.ArrayBuffer[Nothing] = ArrayBuffer()
  5. 因为没有初值来判断泛型, 所以泛型是Nothing
  6. 同时不要忘记省略(), 不要用方法调用的概念认为不带参数就可以不写括号了, 这样是不可以的, 如下:
  7. scala> val a1 = ArrayBuffer[Int]
  8. <console>:12: error: missing argument list for method apply in class GenericCompanion
  9. Unapplied methods are only converted to functions when a function type is expected.
  10. You can make this conversion explicit by writing `apply _` or `apply(_)` instead of `apply`.
  11.  val a1 = ArrayBuffer[Int]

就像前面提过一句的apply方法, 如果不带() 那么就不会调用apply方法, 不调用apply方法, 那么就没有ArrayBuffer的调用.也就是不知道调用谁了.

 

示例二

定义一个包含以下元素的变长数组

"hadoop", "storm", "spark"

 

参考代码


  
  1. scala> val a = ArrayBuffer("hadoop""storm""spark")
  2. a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark)

 

添加/修改/删除元素

  • 使用+=添加元素
  • 使用-=删除元素
  • 使用++=追加一个数组到变长数组

 

示例

定义一个变长数组,包含以下元素: "hadoop", "spark", "flink"

往该变长数组添加一个"flume"元素

从该变长数组删除"hadoop"元素

再将一个数组,该数组包含"hive", "sqoop"追加到变长数组中

 

参考代码


  
  1. // 定义变长数组
  2. scala> val a = ArrayBuffer("hadoop""spark""flink")
  3. a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, spark, flink)
  4. // 追加一个元素
  5. scala> a += "flume"
  6. res10: a.type = ArrayBuffer(hadoop, spark, flink, flume)
  7. // 删除一个元素
  8. scala> a -= "hadoop"
  9. res11: a.type = ArrayBuffer(spark, flink, flume)
  10. // 追加一个数组
  11. scala> a ++= Array("hive""sqoop")
  12. res12: a.type = ArrayBuffer(spark, flink, flume, hive, sqoop)

 

遍历数组

可以使用以下两种方式来遍历数组:

  • 使用for表达式直接遍历数组中的元素
  • 使用索引遍历数组中的元素

 

示例一

定义一个数组,包含以下元素1,2,3,4,5

使用for表达式直接遍历,并打印数组的元素

 

参考代码


  
  1. scala> val a = Array(1,2,3,4,5)
  2. a: Array[Int] = Array(12345)
  3. scala> for(i<-a) println(i)
  4. 1
  5. 2
  6. 3
  7. 4
  8. 5

 

示例二

定义一个数组,包含以下元素1,2,3,4,5

使用for表达式基于索引下标遍历,并打印数组的元素

 

参考代码


  
  1. scala> val a = Array(1,2,3,4,5)
  2. a: Array[Int] = Array(1, 2, 3, 4, 5)
  3. scala> for(i <- 0 to a.length - 1) println(a(i))
  4. 1
  5. 2
  6. 3
  7. 4
  8. 5
  9. scala> for(i <- 0 until a.length) println(a(i))
  10. 1
  11. 2
  12. 3
  13. 4
  14. 5

 

[!NOTE]

0 until n——生成一系列的数字,包含0,不包含n

0 to n ——包含0,也包含n

 

数组常用算法

scala中的数组封装了一些常用的计算操作,将来在对数据处理的时候,不需要我们自己再重新实现。以下为常用的几个算法:

  • 求和——sum方法
  • 求最大值——max方法
  • 求最小值——min方法
  • 排序——sorted方法

求和

数组中的sum方法可以将所有的元素进行累加,然后得到结果

 

示例

定义一个数组,包含以下几个元素(1,2,3,4)

请计算该数组的和

 

参考代码


  
  1. scala> val a = Array(1,2,3,4)
  2. a: Array[Int] = Array(1234)
  3. scala> a.sum
  4. res49: Int = 10

 

最大值

数组中的max方法,可以获取到数组中的最大的那个元素值

 

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

获取数组的最大值

 

参考代码


  
  1. scala> val a = Array(4,1,2,4,10)
  2. a: Array[Int] = Array(412410)
  3. scala> a.max
  4. res50: Int = 10

 

最小值

数组的min方法,可以获取到数组中最小的那个元素值

 

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

获取数组的最小值

 

参考代码


  
  1. scala> val a = Array(4,1,2,4,10)
  2. a: Array[Int] = Array(412410)
  3. scala> a.min
  4. res51: Int = 1

 

排序

数组的sorted方法,可以对数组进行升序排序。而reverse方法,可以将数组进行反转,从而实现降序排序

 

示例

定义一个数组,包含以下几个元素(4,1,2,4,10)

对数组进行升序排序、降序排序

 

参考代码


  
  1. // 升序排序
  2. scala> a.sorted
  3. res53: Array[Int] = Array(124410)
  4. // 降序
  5. scala> a.sorted.reverse
  6. res56: Array[Int] = Array(104421)

 

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/116431889

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。