【scala】scala 数组 (三)

基础内容

1. 数组定义

定长、可变数组的定义;元素添加,删除,排序,求和等常用运算

import scala.collection.mutable.ArrayBuffer
import scala.math.BigDecimal.RoundingMode

/**
  * @author xwolf
  * @date 2017-04-09 18:23
  * @since 1.8
  */
object Collection {

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

    multipleArray()
  }

  /**
    * 数组创建
    */
  private def create() :Unit={
    val a = new Array[String](1)
    a(0)="Hello"

    println(a.toBuffer)
    val ab =ArrayBuffer(3)
    ab+=1
    //append 可接受多个参数,在数组末尾追加元素
    ab.append(12,3,3)
    ab ++=Array(5,12)
    println("insert after 1: "+ ab)
    ab += (3,5)
    println("insert after 2: "+ ab)
    // 在指定索引 添加元素
    ab.insert(2,123,32)
    println("remove before:"+ab)
    //移除当前索引的元素
    ab.remove(1)
    println("remove after 1:"+ ab)
    //移除当前索引开始的元素的个数,超出会抛出下标越界异常
    ab.remove(4,3)
    println(ab)
    val ary = ab.toArray
    val arrayB = ary.toBuffer
    println(arrayB)

  }

  /**
    * 排序
    */
  def sort(){
    val ary =ArrayBuffer[Int]()
    ary ++=Array(1,123,3,123,4,12,10)
    println(ary)

    val a = ary.sortBy(x=>x)
    println(a)
    //自定义排序
    val c= ary.sortWith((a,b)=>a.compareTo(b)<0)
    println(c)
    val d= ary.sortWith((a,b)=>a.compareTo(b)>0)

    val f = ary.sorted
    println(f)
    println(d)
    //去重  过滤 map
    val e = d.distinct.filter(_.%(2)!=0).map(_.+(2))
    println(e)
  }

  /**
    * 常用运算
    */
  def calculator():Unit={
    val ary =Array(12,2,12,33,2,123,1)
    println(ary.max)//最大
    println(ary.min)//最小值
    println(ary.sum)//求和
    println(average(ary))//求平均值
  }

  /**
    * 求数组的平均值 四舍五入保留两位小数
    * @param ary
    * @return
    */
  private def average(ary:Array[Int]):BigDecimal={
    val len = ary.length
    val sum = ary.sum
    (BigDecimal.valueOf(sum)./(BigDecimal.valueOf(len))).setScale(2,RoundingMode.UP)
  }

  /**
    * 多维数组
    */
  def multipleArray(): Unit ={
    //多维数组定义
    val mary = new Array[Array[Int]](2)
    mary(0)=Array(1,2,3,1,4)
    mary(1)=Array(2,1,4)
    for(ary<-mary){
       println(ary.toBuffer)
    }

    //定义 2行 3列 数组
    val nary =Array.ofDim[Int](2,3)
    nary(0)(0)=12
    nary(0)(1)=13
    nary(0)(2)=14

    nary(1)(0)=22
    nary(1)(1)=23
    nary(1)(2)=24

    println(nary.toBuffer)

    for(i<-0 until nary.length){
      println(nary(i).toBuffer)
    }

  }
}

  

scala 数组操作中使用了隐式转化.

更多资料参考:

scala 数组

scala 隐式转换

时间: 2024-11-07 16:56:46

【scala】scala 数组 (三)的相关文章

Scala学习——数组/映射/元组

数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初始值的数组,无需new关键字 Scala声明数组时,需要带有Array类名,且使用 () 来指明长度或提供初始值序列. 在JVM中,Scala的Array以Java数组的方式实现.如arr在JVM中的类型对应java.lang.String[],charArr对应char[]. 2.变长数组 ArrayBuffer,全称scala.col

Scala学习2 ———— 三种方式完成HelloWorld程序

三种方式完成HelloWorld程序 分别采用在REPL,命令行(scala脚本)和Eclipse下运行hello world. 一.Scala REPL. 按照第一篇在windows下安装好scala后,直接Ctrl+R,然后在运行命令窗里输入scala,或者输入cmd后,进入命令行在输入scala. 然后我们输入 print("Hello World!") 看下结果: 第一种方式运行完毕. 注意:前两行命令使用了Tab键,可以像bash一样有补全的功能哦! 二.Scala脚本完成H

Scala系统学习(三):Scala基础语法

如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合.现在我们简单地看一下类,对象,方法和实例变量的含义. 对象 - 对象有状态和行为.一个对象是类的一个实例.例如 - 狗有状态:颜色,名称,品种,它行为有:摇摆,吠叫和吃东西. 类 - 可以将类定义为描述与该类相关的行为/状态的模板/蓝图. 方法 - 一个方法基本上是一种行为.一个

SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i ).显然,一个稀疏矩阵的转置仍然是稀疏矩阵.你的任务是对给定一个m*n的稀疏矩阵( m

hihocoder #1415 : 后缀数组三&#183;重复旋律3

#1415 : 后缀数组三·重复旋律3 Time Limit:5000ms Case Time Limit:1000ms Memory Limit:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi在练习过很多曲子以后发现很多作品中的旋律有共同的部分. 旋律是一段连续的数列,如果同一段旋律在作品A和作品B中同时出现过,这段旋律就是A和B共同的部分,比如在abab 在 bababab 和 cabacababc 中都出现过.小Hi想

hiho一下122周 后缀数组三&#183;重复旋律

后缀数组三·重复旋律3 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi在练习过很多曲子以后发现很多作品中的旋律有共同的部分. 旋律是一段连续的数列,如果同一段旋律在作品A和作品B中同时出现过,这段旋律就是A和B共同的部分,比如在abab 在 bababab 和 cabacababc 中都出现过.小Hi想知道两部作品的共同旋律最长是多少? 解题方法提示 输入 共两行.一

后缀数组三&#183;重复旋律3

#1415 : 后缀数组三·重复旋律3 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi在练习过很多曲子以后发现很多作品中的旋律有共同的部分. 旋律是一段连续的数列,如果同一段旋律在作品A和作品B中同时出现过,这段旋律就是A和B共同的部分,比如在abab 在 bababab 和 cabacababc 中都出现过.小Hi想知道两部作品的共同旋律最长是多少? 解题方法提示

scala学习第三章数组相关操作

val b = new ArrayBuffer[Int]() //或者 new ArrayBuffer[Int] b += 1 //ArrayBuffer(1) 用+= 在尾端添加元素 b += (1,2,3,5) //ArrayBuffer(1,1,2,3,5) 在尾端添加多个元素 b ++= Array(1,2,3) //ArrayBuffer(1,1,2,3,5,1,2,3) 在尾端追加集合 用++= b.trimEnd(5) //ArrayBuffer(1,1,2) 移除最后5个元素 b

一天一段scala代码(三)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples import scala.collection.mutable.ArrayBuffer object Example3 { def main(args: Array[String]) { val start = System.currentTimeMillis println("took " + (System.curre