一、定长数组

Array定长数组,访问数组元素需要通过()  数组长度是固定的,但是内容可以修改

val nums = new Array[Int](10)  //长度为10的int数组 初始化为0
val strs = new Array[String](10) //长度为10的String数组 初始化为null
val s = Array("Hello", "World") //初始化数组长度为2,不需要new
s(0) = "GoodBye" //访问数组元素通过()
println(nums(0))
println(strs(0))
println(s(0)+" "+s(1))

结果

0
null
GoodBye World

二、变长数组

变长数组使用ArrayBuffer

import scala.collection.mutable.ArrayBuffer

val b = ArrayBuffer[Int]() //或者 new ArrayBuffer[Int]

b+=1
//在尾端添加元素
//ArrayBuffer(1)
b+=(2,3,4,5)
//在尾端添加多个元素
//ArrayBuffer(1,2,3,4,5)
b++=ArrayBuffer(8,19,20)
//可以使用++-操作符追加任意集合
//ArrayBuffer(1,2,3,4,5,8,19,20)
b.trimEnd(3)
//在尾部删除3个元素
//ArrayBuffer(1,2,3,4,5)
b.insert(2,6)
//在下标2之前插入6
//ArrayBuffer(1,2,6,3,4,5)
b.insert(3,7,8,9)
//在下标3之前插入7,8,9
//ArrayBuffer(1,2,6,7,8,9,3,4,5)
b.remove(2)
//删除下标为2的元素
//ArrayBuffer(1,2,7,8,9,3,4,5)
b.remove(2,3)
//从下标为2的元素开始,删除3个元素
//ArrayBuffer(1,2,3,4,5) val c = b.toArray //不知道元素个数先构建ArrayBuffer,然后再转化成数组
println(c(0))
println(c.toBuffer) //数组转化成数组缓冲

结果

1
ArrayBuffer(1, 2, 3, 4, 5)

三、遍历数组和数组缓冲

for(i<- 0 until b.length) print(c(i)) //直接通过下标访问数组,until 不包括上线
println()
for(i<- 0 until (b.length,2)) print(b(i)) //step = 2 步长为2
println()
for(i<- (0 until b.length).reverse) print(b(i)) //反转
println()
for(i<- b) print(i) //不使用数组下标直接访问元素
println()

结果

 12345
  135
  54321
  12345

四、数组转换

通过for yield对数据进行转换

val a = Array(2,3,5,7,11)
val b = for(i<- a if i%2 !=0) yield i * 2 //生成一个新的数组
for(i<- b) print(i+" ")

结果

6 10 14 22

五、常用算法

import scala.util.Sorting.quickSort
val a = Array(2,9,5,7,11) println(a.sum)
println(a.max)
println(a.toBuffer)
println(a.mkString(" and "))
println(a.mkString("<"," and ",">"))
println(a.toBuffer.sorted) //数组本身不变,产生新的数组,升序排列
println(a.toBuffer.sortWith(_>_)) //数组本身不变,产生新的数组,降序排列
println(a.toString)
println(a.toBuffer.toString())
quickSort(a) //对数组本身排序

结果

34
11
ArrayBuffer(2, 9, 5, 7, 11)
2 and 9 and 5 and 7 and 11
<2 and 9 and 5 and 7 and 11>
ArrayBuffer(2, 5, 7, 9, 11)
ArrayBuffer(11, 9, 7, 5, 2)
[I@4a3d0611
ArrayBuffer(2, 9, 5, 7, 11)

六、解读scaladoc

七、多维数组

八、与java互操作

1.

    val r = scala.util.Random
val f = (n:Int)=>{
val arr = new Array[Int](n)
for(i<- 0 until n) arr(i)=r.nextInt(n)
arr
}
val a =f(10)
println(a.toBuffer.toString())

2.

    val arr = Array(1,2,3,4,5)

    for(i<- 0 until arr.length/2 ){
val tmp = arr(i*2+1)
arr(i*2+1)=arr(i*2)
arr(i*2)=tmp
} println(arr.toBuffer.toString())

3.

    val new_arr = for(i<- 0 until arr.length)
yield
if(i%2==0){
if(i==arr.length-1)
arr(i)
else
arr(i+1)
}else{
arr(i-1)
}
println(new_arr.toBuffer.toString())

4.

    val a = Array(3,0,4,7,9,-8,-2,2,1,0,5)
val new_a = for(j<- 1 to 2 ;i<- 0 until a.length if j==1 && a(i)>0 || j==2 && a(i)<=0 ) yield a(i) println(new_a.toBuffer.toString())

5.

    val d = Array[Double](1,2,5,9,3,2)

    println(d.sum/d.length)

6.

    val d = Array(1,2,5,9,3,2)
println(d.sorted.toBuffer.toString)
println(d.sortWith(_>_).toBuffer.toString())
scala.util.Sorting.quickSort(d)
println(d.toBuffer.toString()) val db = ArrayBuffer (1,2,5,9,3,2)
println(db.sorted)
println(db.sortWith(_>_))

7.

    val db = ArrayBuffer (1,2,5,9,3,2)

    println(db.distinct.toString())

参考《快学Scala》

Scala--数组相关操作的更多相关文章

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

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

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

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

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

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

  4. Scala学习三——数组相关操作

    一.若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 固定长度数组: 如val nums=new Array[Int](10) //10个整型数组,所有元素初始化为0; val ...

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

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

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

  7. 【php】php数组相关操作函数片段

    下面这些都是我在工作中用到的函数,现在整理下. 判断是否是一个数组 function _is_array($value){ if (is_array($value)) { return true; } ...

  8. Ch03 数组相关操作 - 练习

    1. 编写一段代码,将a设置为一个n个随机数的数组,要求随机数介于0(包含)和n(不包含)之间. //import java.lang.Math def getArray(n:Int)={   val ...

  9. linux awk数组相关操作介绍

    用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...

  10. 大数据学习——scala类相关操作

    1 类的定义 package com /** * Created by Administrator on 2019/6/3. */ //类并不用声明为public. class Person { // ...

随机推荐

  1. JSP内置对象——out对象/request对象

    在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...

  2. Android 优秀开源项目

    以下是本人日常工作中收集的比较不错的Android开源项目 roottools: RootTools gives Rooted developers easy access to common roo ...

  3. Android Dragger2快速入门浅析

    定Dagger2的基本介绍:dagger2是一个依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建. 使用Dagger2的好处:为了进一步解耦和方便测试,我们会使用依赖注入的方式构建对象 (不使 ...

  4. Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠

    此文的代码在Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果代码的基础上进行修改,如果你没有看过本系列的第一篇文章最好先看一看.Co ...

  5. android 性能优化 -- 启动过程 冷启动 热启动

    一.应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动. 2.热启动:当启 ...

  6. Android应用程序启动过程(一)总结

    一.App启动方式 1,冷启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用. 冷启动的特点:因为系统会重新创建一个新的进程分配给它,所以会创建和初始化App ...

  7. 【SPL标准库专题(9)】 Datastructures:SplObjectStorage

    PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...

  8. leveldb源码分析--SSTable之逻辑结构

    SSTable是leveldb 的核心模块,这也是其称为leveldb的原因,leveldb正是通过将数据分为不同level的数据分为对应的不同的数据文件存储到磁盘之中的.为了理解其机制,我们首先看看 ...

  9. [Spark Core] Spark 核心组件

    0. 说明 [Spark 核心组件示意图] 1. RDD resilient distributed dataset , 弹性数据集 轻量级的数据集合,逻辑上的集合.等价于 list 没有携带数据. ...

  10. NIO 学习笔记

    0. 介绍 参考   关于Java IO与NIO知识都在这里   ,在其基础上进行修改与补充. 1. NIO介绍 1.1 NIO 是什么 Java NIO 是 java 1.4, 之后新出的一套IO接 ...