一.若长度固定则使用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. rabbitmq权限细分二

    禁止用户远程登录 主要有以下几步 1.进入容器 docker exec -it ID /bin/bash 2.打开配置文件 vi /etc/rabbitmq/rabbitmq.conf 3.加入配置, ...

  2. DS博客作业07——查找

    1.本周学习总结 1.1思维导图 1.2.谈谈你对查找运算的认识及学习体会. 查找的内容和前两章树和图相比,要简单许多,在二次搜索树虽然也要用到树,但是也是很简单的树的操作,再加上查找的代码可以使用m ...

  3. LeetCode 76. 最小覆盖子串(Minimum Window Substring)

    题目描述 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "ABC ...

  4. 【Webscraper】不懂编程也能爬虫

    一.配置环境 在浏览器中安装web scraper插件. 所有安装包下载链接: https://pan.baidu.com/s/1CfAWf0wMO6WqicoUgdYgkg 提取码: nn2e 安装 ...

  5. Android RecyclerView实现加载多种条目类型

    今天咱们是用RecyclerView来实现这个多种Item的加载. 其实最关键的是要复写RecyclerView的Adapter中的getItemViewType()方法 这个方法就根据条件返回条目的 ...

  6. Linux终端中文显示乱码

    今天,帮我们同学处理一下中文显示乱码的问题.这个是个国内Linux用户烦恼的问题,由于大部分的Linux发行版都是以英语为主体的,而且英文在通用性和稳定性上都比中文要好一些,各种奇怪的BUG也要少一点 ...

  7. RabbitMQ学习之:(八)Topic Exchange (转贴+我的评论)

    From: http://lostechies.com/derekgreer/2012/05/18/rabbitmq-for-windows-topic-exchanges/ RabbitMQ for ...

  8. Swift3.0封装 AFN 的 GET&POST网络请求

    // // PSNetWorkManage.swift // WeiBoSwift // // Created by 思 彭 on 16/9/25. // Copyright © 2016年 思 彭. ...

  9. 手机通过fiddler调试页面

    fiddler设置 首先我们打开Fiddler->Tools->Fiddler Options在Connection面板里将Allow remote computers to connec ...

  10. 树莓派搭建bt下载机、即是安装transmission

    Transmission是一种BitTorrent客户端, 安装:sudo apt-get install transmission-daemon 给用户授权:sudo usermod -a -G p ...