Scala学习三——数组相关操作
一.若长度固定则使用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学习三——数组相关操作的更多相关文章
- Scala学习(三)----数组相关操作
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...
- 快学Scala习题解答—第三章 数组相关操作
3 数组相关操作 3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间 random和yield的使用 import scala.math.rando ...
- Scala学习(三)练习
Scala数组相关操作&练习 1. 1. 编写一段代码,将a设置为一个包含n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间 def main (args: Array[Strin ...
- scala 入门(2)--数组相关操作
scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...
- JavaScript基础学习(三)—数组
一.数组简介 JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...
- scala 对一个数组分组操作
通常我们有一些需求,对一个数组两两进行翻转,通常就涉及到奇数偶数,否则就会出现数组index异常了,所以我们该怎么办呢? 虽然是一个入门级问题,但是我还是觉得这是一个很有意思的题目,因此写了一个对于通 ...
- 《快学Scala》第三章 数组相关操作
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- 快学Scala-第三章 数组相关操作
知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...
随机推荐
- 预处理、const、static与sizeof-用#define实现宏并求最大值和最小值
1:实现代码: #define MAX(x,y) (((x)>(y)) ? (x):(y)) #define MIN(x,y) (((x)>(y)) ? (x):(y)) 需要注意的几点: ...
- echarts中国地图3D各个城市标点demo
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <meta ...
- [转]五步git操作搞定Github中fork的项目与原作者同步
命令如下: git clone xxx-fork.git git remote add xxx xxx.git git fetch xxx git merge xxx/master git push ...
- Java访问Oracle服务器
Java访问Oracle服务器--orcl数据库---emp表 private static String driver = "oracle.jdbc.driver.Orac ...
- mybaits及mybaits generator 插件使用指南(亲测原创)
一. eclips安装mybaits插件 参考文章:http://www.cnblogs.com/zengsong-restService/archive/2013/08/09/3248245.htm ...
- 更改mysql 数据库 utf8
mysql> alter database 数据库名 character set utf8;
- java错误与异常
java异常处理机制 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常, 让程序尽最大可能恢复正常并继续执行,且保持代码的清晰.Java中的异常可以是函数中的语句执 ...
- c语言求素数以及改进算法
代码需要使用c99编译 #include <stdio.h> #include <stdlib.h> #include <math.h> //是否为素数 //从2到 ...
- python中学习K-Means和图片压缩
python中学习K-Means和图片压缩 大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧. 通俗的 ...
- Go项目实战:打造高并发日志采集系统(一)
项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个文件夹,这些日志记录了不同的功能.随着业务的增多,日志文件也再增多,企业中常常需要实现一个独立的 ...