定长数组
|
// 10个整数的数组,所有元素初始化为0
valnums=newArray[Int](10)
// 长度为2的数组,类型是推断出来的
// 提供初始值时不需要使用new
vals=Array("Hello","World")
// 访问元素
// 虽然s是val的,但是其中的内容还是可以变的
s(0)="GoodBye"
|
在JVM中,Scala的数组是用Java的数组一样的方式实现的。
变长数组
对应于Java的ArrayList,Scala中可变长度的数组使用的是ArrayBuffer。
|
importscala.collection.mutable.ArrayBuffer
valb=ArrayBuffer[Int]()
// 也可以是 val b = new ArrayBuffer[Int]
// 在尾端添加元素
b+=1
b+=(1,2,3,5)
// 追加一个集合
b++=Array(8,13,21)
|
其他的还是看API吧。
在ArrayBuffer尾端添加或者移除元素是高效的,但其他位置不是,所以尽可能将操作放在尾端进行。
还有Array和ArrayBuffer间的转换: b.toArray和 a.toBuffer。
遍历
前面见过的for表达式还是可用的。这里再提一点更多的。
|
// 每两个元素一跳
for(i<-0until(a.length,2))
// 反序遍历
for(i<-0untila.length reverse)
// 不使用下标时
for(elem<-a)
|
数组转换
通过for推导式,可以便捷生成一个新的数组。
|
for(elem<-aifelem%2==0)yield2*elem
|
还有一种方式,对于习惯函数式编程的人来说更加熟悉:
|
a.filter(_*2==0).map(2*_)
|
这里的操作都没有改变原数组,而是生成了一个新的数组。因为Scala结合了函数式编程范式,而函数式是比较排斥函数和方法的副作用的。
常用算法
|
valb=ArrayBuffer(1,7,2,9)
// 排序,不改变原来的数组,而是生成了一个新的数组
valbSorted=b.sorted(_<_)
|
多维数组
多维数组就是数组的数组,Scala中二维数组看起来就是 Array[Array[Double]]。
要构建多维数组,使用 ofDim方法。
|
// 三行四列的数组
valmatrix=Array.ofDim[Double](3,4)
// 访问多维数组
maxtrix(row)(column)=42
// 可以创建每行长度不一样的数组
valtriangle=newArray[Array[Int]](10)
for(i<-0until triangle.length)
triangle(i)=newArray[Int](i+1)
|
与Java的互操作
引入scala.collection.JavaConversions包内的隐式转换方法,就可以在代码中自动包装Scala内的数组和Java里的List等。
|
importscala.collection.JavaConversions.bufferAsJavaList
importscala.collection.mutable.ArrayBuffer
valcommand=ArrayBuffer("ls","-al","/home/zheng")
valpb=newProcessBuilder(command) // 这里自动包装了
|
从Java数组类到Scala数组也是差不多的。
http://nerd-is.in/2013-08/scala-learning-working-with-array/
分享到:
相关推荐
def main(args: Array[String]): Unit = { //编写一个隐式函数转成 Double->Int 转换 //隐式函数应当在作用域才能生效 implicit def f1(d: Double): Int = { //底层 生成 f1$1 d.toInt } implicit def f2(f: ...
### Scala学习之路(一)—— 开发环境搭建与首个程序 #### 一、Scala简介 Scala是一种多范式编程语言,旨在实现可扩展性,并融合了面向对象编程和函数式编程的最佳特性。作为一种与Java非常相似的语言,Scala能够...
4. **Data Structures(数据结构)**:Scala提供了一套丰富的内置数据结构,包括但不限于数组(Array)、列表(List)、集合(Set)和映射(Map)。这些数据结构既支持不可变版本也支持可变版本,以适应不同的场景需求。 5....
《Scala编程基础——掌握大数据时代的基石》 Scala作为一门强大的函数式编程语言,因其与Java虚拟机的无缝集成,成为了大数据处理领域中的首选语言之一。本篇将详细讲解Scala的基础语法,包括变量与常量、数据类型...
为了快速入门Scala,我们首先来看一个最经典的例子——“Hello World”。虽然这个例子简单至极,但足以让我们初步了解Scala的基本语法。 ```scala object HelloWorld { def main(args: Array[String]) { println...
Scala提供了一个交互式的命令行工具——`scala`命令,允许开发者直接运行Scala代码片段,进行测试和调试。只需在终端输入`scala`,即可启动解释器。在这里,你可以立即看到代码执行的结果,这对于学习和理解新概念...
###《Scala in Action》中文翻译——个人自娱,与版权无关 目 录 第一部分: 第1章: 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2 1.2.1 1.2.2 1.3 1.3.1 1.3.2 1.4 如果你来自某种动态语言 1.4.1 静态类型才是正确的...
### Spark从入门到实战——SCALA编程篇 #### 一、大数据分析框架概要与Spark课程学习计划 在大数据时代,高效处理海量数据成为企业和组织的核心需求之一。Spark作为当前最受欢迎的大数据分析框架之一,以其高性能...
李代数是由向量空间(在Scala中可以表示为数组或集合)和一个二元运算——李括号(Lie bracket)组成的。李括号满足反交换律([x,y] = -[y,x])和雅可比恒等式([x,[y,z]] + [y,[z,x]] + [z,[x,y]] = 0)。在Scala中...
在这个案例中,它将包含Spark和Scala的相关依赖,例如`spark-core`、`spark-sql`以及Scala编译器等。 3. `src`:源代码目录,通常分为`src/main/scala`和`src/main/resources`两部分。前者存放Scala源代码,后者...
本文将深度探讨这个项目的核心——"common-4.17.37.Final.zip",揭示其背后的编程理念和技术实现。 首先,"case-app"的核心在于它的`case class`扩展,使得开发者可以轻松定义命令行接口。在Scala中,`case class`...
在这个项目中,我们将探讨如何使用两种不同的编程语言——Scala和Java来实现生命游戏。Scala是一种多范式的编程语言,结合了面向对象和函数式编程的特性,而Java作为广泛使用的面向对象编程语言,其稳定性和跨平台性...
def main(args: Array[String]) { val spark = SparkSession.builder.appName("Simple Application").getOrCreate() val textFile = spark.sparkContext.textFile("hdfs://localhost:9000/user/yourname/input") ...
- 引用数据类型:如类(Class)、数组(Array)等。 - **运算符** - 算术运算符:+、-、*、/、%。 - 关系运算符:==、!=、>、<、>=、。 - 逻辑运算符:&&、||、!。 - **方法** - 方法是完成特定功能的一段代码...
虽然这种方法看似简单明了,但它存在一个显著的缺陷——容易引发OOM异常。 - **问题所在**:`Iterable`是一种延迟加载的数据结构,在内存中仅保存指向数据的指针,而`List`则是一个容器型数据结构,会实际存储所有...
- **Scala版本**:2.12.6 - **Spark版本**:2.2.1 - **Hadoop版本**:2.7.6 这些工具和环境的版本选择是为了保证开发环境的一致性和兼容性。特别是Spark与Hadoop的版本搭配尤为重要,不同的Spark版本可能支持不同...