ITPub博客

首页 > 大数据 > 数据分析 > 好程序员大数据学习路线分享Scala系列之数组

好程序员大数据学习路线分享Scala系列之数组

原创 数据分析 作者:好程序员IT 时间:2019-09-03 16:53:30 0 删除 编辑

好程序员大数据学习路线分享Scala系列之数组, 数组(Array)

1.  定长数组

创建一个定长数组的方式


使用Array定义一个长度不变的数组

object ArrayDemo {
   def main(args: Array[String]){
     // 初始化一个长度为 8 的定长数组,其所有元素均为 0
     val arr1 =  new Array[Int](8)
     // 直接打印定长数组,内容为数组的 hashcode 值
    println(arr1)
     // 将数组转换成数组缓冲,就可以看到原数组中的内容了
     //toBuffer 会将数组转换长数组缓冲
    println(arr1.toBuffer)

     // 注意:如果不使用 new 获取数组,相当于调用了数组的 apply 方法,直接为数组赋值
     // 初始化一个长度为 1 ,值为 10 的定长数组
     val arr2 = Array[Int](10)
     // 输出数组元素值
    println(arr2.toBuffer)

     // 定义一个长度为 3 的定长数组
     val arr3 = Array("hadoop", "storm", "spark")
     // 使用 () 来访问元素
    println(arr3(2))

     // 包含 10 个整数的数组,初始化值为 0 
     val nums =  new Array[Int](10)
     // 遍历数组
     for(i <- 0 until nums.length)
      print(s"$i:${nums(i)} ")
      println()

     // 包含 10 个字符串的数组,初始化值为 null
     val strs0 =  new Array[String](10)
     for(i <- 0 until strs0.length)
      print(s"$i:${strs0(i)} ")
      println()

     // 赋初值的字符串数组
     val strs1 = Array("hello" ,"world")
     for(i <- 0 until strs1.length)
      print(s"$i:${strs1(i)} ")
      println()

     // 访问并修改元素值
    strs1(0) = "byebye"
     for(i <- 0 until strs1.length)
      print(s"$i:${strs1(i)} ")
      println()

  }
}

result

2.  变长数组

定义变长数组的方式:


使用 ArrayBuffer定义长度按需变化的数组。

import scala.collection.mutable.ArrayBuffer

object VarArrayDemo {
   def main(args: Array[String]){
     // 定义一个空的可变长 Int 型数组
     val nums =  ArrayBuffer[Int]()

     // 在尾端添加元素
    nums += 1

     // 在尾端添加多个元素
    nums += (2,3,4,5)

     // 使用 ++= 在尾端添加任何集合
    nums ++= Array(6,7,8)

    // 这些操作符,有相应的  -=  , --= 可以做数组的删减,用法同 += , ++=
      
    // 使用 append 追加一个或者多个元素
    nums.append(1)
    nums.append(2,3)
      
    // 在下标 2 之前插入元素
    nums.insert(2,20)
    nums.insert(2,30,30)    

     // 移除最后 2 元素
    nums.trimEnd(2)
     // 移除最开始的一个或者多个元素
    nums.trimStart(1)
   
     // 从下标 2 出移除一个或者多个元素
    nums.remove(2)
    nums.remove(2,2)
      
      
    // 使用增强 for 循环进行数组遍历   
     for(elem <- nums)
      println(elem)
      
     // 基于下标访问使用增强 for 循环进行数组遍历
     for(i <- 0 until nums.length)
      println(nums(i))

  }
}

执行结果:


3.  遍历数组

1.增强for循环,参见变长数组的代码

2.好用的until会生成脚标,0 until 10 包含0不包含10 参见定长数组部分代码4.1.4. 数组转换

4.  数组转换

yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变

bject ArrayTransfer {

   def main(args: Array[String]): Unit = {

     // 使用 for 推导式生成一个新的数组
     val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
     val res1 =  for(elem <- a)  yield 2*elem
     for(elem <- res1)
      print(elem+" ")
    println()

     // 对原数组元素过滤后生成一个新的数组
     // 将偶数取出乘以 10 后再生成一个新的数组
     val res2 =  for(elem <- a  if elem%2 == 0) yield 2*elem
     for(elem <- res2)
      print(elem+" ")
    println()

     // 使用 filter 和 map 转换出新的数组
     val res3 = a.filter(_ % 2 == 0).map(2 * _)
     for(elem <- res3)
      print(elem+" ")
    println()
  }

执行结果:


5.  数组常用算法

在Scala中,数组上的某些方法对数组进行相应的操作非常方便!

object ArrayAlgorithm {
   def main(args: Array[String]): Unit = {

     val a = Array(9, 1, 2, 5, 3, 7, 8, 4)

     // 求和
     val res1 = a.sum
    println(res1)

     // 求最大值
     val res2 = a.max
    println(res2)

     // 排序
     val res3 = a.sorted
     // val res4 = a.sortWith(_>_) 指定排序方式
     for(elem <- res3)
      print(elem + " ")
  }
}

执行结果:


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2655873/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
欢迎关注公众号:好程序员特训营 web前端教程分享 723729549 大数据教程分享 703503210

注册时间:2019-03-20

  • 博文量
    539
  • 访问量
    410788