Scala之数组

1. 数组

1.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()

  }
}

执行结果:

1.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)

   //使用增强for循环进行数组遍历   
    for(elem <- nums)
      print(s"$elem ")
    println()

    //移除最后2元素
    nums.trimEnd(2)

    //在下标2之前插入元素
    nums.insert(2,20)
    nums.insert(2,30,30)
    
    //使用增强for循环进行数组遍历
    for(elem <- nums)
      print(s"$elem ")
    println()

    //从下标2出移除一个或者多个元素
    nums.remove(2)
    nums.remove(2,2)
    
    //使用增强for循环进行数组遍历
    for(elem <- nums)
      print(s"$elem ")
    println()

  }
}

执行结果:

1.3. 遍历数组

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

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

1.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()
  }

执行结果:

1.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 + " ")
  }
}

执行结果:

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

 

转载于:https://my.oschina.net/aibinxiao/blog/2991747

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值