一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer

  固定长度数组:

    如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0;

    val a=new Array[String](10) //10个元素的字符串数组,所有元素为null

  变长数组:

    ArrayBuffer(相当于Java中的ArrayList)

import scala.collection.mutable.ArrayBuffer
val b=ArrayBuffer[Int]()
//或者new ArrayBuffer[Int]
//一个空的数组缓冲,准备存放整数
b+=1
//ArrayBuffer(1)
//用+在尾端添加元素
b+=(1,2,3,5)
//ArrayBuffer(1,1,2,3,5)
//在尾端添加多个元素,以括号包起来
b++=Array(8,13,21)
//ArrayBuffer(1,1,2,3,5,8,13,21)
//可以使用++=操作符追加任何集合
b.trimEnd(5)
//ArrayBuffer(1,1,2)
//移除最后5个元素
//可以在任意位置插入和移除元素,但是不高效
b.insert(2,6)
//ArrayBuffer(1,1,6,2)
//在下标2之前插入
b.insert(2,7,8,9)
//ArrayBuffer(11,7,8,9,6,2)
//可以插入任意多的元素
b.remove(2)
//ArrayBuffer(1,1,8,9,6,2)
b.remove(2,3)
//ArrayBuffer(1,1,2)
//第二个参数的含义是移除多少个元素
b.toArray()//数组缓冲转换为固定长度数组
a.toBuffer()//固定长度转换为数组缓冲

二.提供初始值时不要使用new

  val s=Array("Hello","World")长度为2的Array(String),已经提供初始值就不需要new

三.用()来访问元素

  注意使用()来访问元素,而不是[]

四.用for(elem<-arr)来遍历元素

  for(i<- 0 until a.length)...:util是RichInt类的方法,返回所有小于(不包括)上限的数字(o until 10实际调用的是0.until(10))。

  每两个元素一跳(0 util (a.length,2));

  从数组尾端开始:(0 until a.length).reverse;

  如果在循环体中不需要用到数组下标,直接访问元素for(elem<-a)

五.用for(elem<-arr if...)...yiels...来将原数组转型为新数组

  例子:

    

val a=Array(2,3,5,7,11)
val result= for (elem-<a) yield 2*elem
//result为Array(4,6,10,14,22)

  注:for(...)yield创建的是一个类型与原始集合相同的新集合;

    常用算法,Array(1,2,3).sum/min/max,Array(22,4,5,1).sorted(_<_)[从小到大],Array(22,4,5,1).sorted(_>_)[从大到小]    

六.Scala数组和Java数组可以互操作;用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数

  多维数组创建:

    val matrix=Array.ofDim[Double](3,5)//三行四列

  使用scala.collection.JavaConversions转换案例:

  

七.练习

  

  

   1.

 import scala.util.Random
def main (args: Array[String]) {
createArr(10).foreach(println)
}
def createArr(n:Int):Array[Int]={
val arr=new Array[Int](n)
val rand=new Random()
for(ele <- arr)
yield rand.nextInt(n)
}

  2.

  def main(args: Array[String]) = {
val arr=Array(1,2,3,4,5)
swap(arr)
arr.foreach(print) }
def swap(arr:Array[Int]):Unit={
for(i<-0 until(arr.length-1,2)){
val tmp=arr(i)
arr(i)=arr(i+1)
arr(i+1)=tmp
}

  3.

def main(args: Array[String]) = {
val arr1 = Array(1, 2, 3, 4, 5)
val arr2 = swapByYield(arr1)
arr2.foreach(print)
} def swapByYield(arrs: Array[Int]) = {
for (i <- 0 until arrs.length) yield {
if (i < arrs.length - 1 && i % 2 == 0) {
val tmp = arrs(i)
arrs(i) = arrs(i + 1)
arrs(i + 1) = tmp
}
}
arrs
}

  4.

def main(args: Array[String]) = {
val a = Array(1, -2, 0, -3, 1, 2)
val b = sigArr(a)
b.foreach(println)
} def sigArr(arr: Array[Int]) = {
val buff = new ArrayBuffer[Int]()
buff ++= (for (i <- arr if i > 0) yield i)
buff ++= (for (i <- arr if i == 0) yield i)
buff ++= (for (i <- arr if i < 0) yield i)
buff.toArray
}

  5.

 def main(args: Array[String]) = {
val a = Array[Double](1, 4, 2, 10, 3, -1, -3)
val b = Avgarr(a)
println(b)
} def Avgarr(arr: Array[Double]) = {
arr.sum / arr.length
}

  6.

  def main(args: Array[String]): Unit = {
val arr1 = Array(5, 4, 3, 2, 1)
reverseArray(arr1)
arr1.foreach(print)
print("\n")
val arr2 = ArrayBuffer(5, 4, 3, 2, 1)
reverseArrayBuffer(arr2).foreach(print)
} /**
* Array反序排列(注:Array长度不可变)
*
* @param arr
*/
def reverseArray(arr: Array[Int]) = {
for (i <- 0 until arr.length / 2) {
val tmp = arr(i)
arr(i) = arr(arr.length - 1 - i)
arr(arr.length - 1 - i) = tmp
}
} def reverseArrayBuffer(arr: ArrayBuffer[Int]) = {
val reverseArr = ArrayBuffer[Int]()
reverseArr++= arr.reverse
reverseArr

  7.

def main(args: Array[String]): Unit = {
val arr1=ArrayBuffer(1,2,3,3,4,4,5,1,6,7)
val arr2=ArrayBuffer[Int]()
arr2++=arr1.distinct
arr2.foreach(print)
}

  8.

def main(args: Array[String]): Unit = {
val arr=Array(-1,2,3,-4,-5)
val arr2=proResult(arr)
arr2.foreach(print)
}
def proResult(arr:Array[Int])={
val indexs=for(i <- 0 until arr.length if arr(i)<0) yield i
val afterDropIndexs=indexs.reverse.dropRight(1)
val tmp=arr.toBuffer
for(i<-afterDropIndexs) tmp.remove(i)
tmp
}

  9.

 def main(args: Array[String]): Unit = {
val arr=timeTone
arr.foreach(print)
}
def timeTone={
val arr=java.util.TimeZone.getAvailableIDs()
val tmp=for(i<-arr if i.startsWith("America/")) yield{i.drop("America/".length)}
scala.util.Sorting.quickSort(tmp)
tmp
}

  10.

def main(args: Array[String]): Unit = {
val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
println(flavors.getClass.getSimpleName)
}

Scala学习三——数组相关操作的更多相关文章

  1. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  2. 快学Scala习题解答—第三章 数组相关操作

    3 数组相关操作  3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间  random和yield的使用 import scala.math.rando ...

  3. Scala学习(三)练习

    Scala数组相关操作&练习 1. 1. 编写一段代码,将a设置为一个包含n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 def main (args: Array[Strin ...

  4. scala 入门(2)--数组相关操作

    scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...

  5. JavaScript基础学习(三)—数组

    一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...

  6. scala 对一个数组分组操作

    通常我们有一些需求,对一个数组两两进行翻转,通常就涉及到奇数偶数,否则就会出现数组index异常了,所以我们该怎么办呢? 虽然是一个入门级问题,但是我还是觉得这是一个很有意思的题目,因此写了一个对于通 ...

  7. 《快学Scala》第三章 数组相关操作

  8. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  9. 快学Scala-第三章 数组相关操作

    知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...

随机推荐

  1. 14.链表中倒数第k个结点 Java

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路 快指针和慢指针,快指针先跑K个单位然后慢指针开始跑,快指针跑到最后一个节点的时候慢指针对应的就是链表中倒数第k个结点 public stat ...

  2. 剑指offer21----数组中奇数偶数

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 基本实现 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每 ...

  3. maven坐标及依赖范围的学习(1)

    首先,我们先了解什么是maven的坐标(重中之重): 在这里我们可以看到那三个红色的行,基本是pom.xml中出现的最多的配置     例如这个配置:这里我们可以看到我们这个项目的pom文件中,他对名 ...

  4. Flutter移动电商实战 --(11)首页_屏幕适配方案和制作

    1.flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局. 插件会让你先设置一个UI稿的尺寸,他会根据这个尺寸 ...

  5. 微信小程序之状态管理A

    其实这个标题 不是很对 主要是最近小程序项目中 有这么一个状态 所有商品都共用一个商品详情页面  大概就是这样子  为了公司 保险起见,一些展示的内容已经处理 但是无伤大雅 就是这么两个按钮 左侧粉色 ...

  6. 基于eclipse的java与mysql开发环境的搭建

    本文主要介绍  Java与MySQL的连接 1.安装jdk 略~ 园子里有很多 2.安装mysql 略~ 3.下载并安装JDBC,通过mysql官网下载  http://dev.mysql.com/d ...

  7. <javaScript>谈谈JavaScript中的变量、指针和引用

    1.变量我们可能产生这样一个疑问:编程语言中的变量到底是什么意思呢?事实上,当我们定义了一个变量a时,就是在存储器中指定了一组存储单元,并将这组存储单元命名为a.变量a的值实际上描述的是这组存储单元中 ...

  8. 保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.Media.Imaging.BitmapImage”。

    保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.M ...

  9. nginx的负载均衡和反向代理

    本文介绍一些负载均衡和反向代理的一些基本概念,然后介绍如何基于nginx实现,包括两种安装nginx的方法:yum安装和源码安装,以及ngix该如何配置等. 什么是负载均衡? 概念 负载均衡是高可用网 ...

  10. How to remove duplicate lines in a large text file?

    How would you remove duplicate lines from a file that is  much too large to fit in memory? The dupli ...