[原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合。数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合
2 声明数组变量:
要使用的程序的数组,必须声明一个变量来引用数组,必须指定数组变量可以引用的类型。下面是语法声明数组变量:
- var z:Array[String] = new Array[String](3) or var z = new Array[String](3) or var z = Array("Zara", "Nuha", "Ayan")
在这里,z被声明为字符串数组,最多可容纳三个元素。可以将值分配给独立的元素或可以访问单个元素,这是可以做到通过使用类似于以下命令:
- z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"
- 3.Scala中数组方法:
以下是重要的方法,可以同时使用数组。如上所示,则必须使用任何提及的方法之前,要导入Array._包。有关可用方法的完整列表,请Scala中的官方文件。
SN | 方法及描述 |
---|---|
1 | def apply( x: T, xs: T* ): Array[T] 创建T对象,其中T可以是Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean数组。 |
2 | def concat[T]( xss: Array[T]* ): Array[T] 连接所有阵列成一个数组。 |
3 | def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit 复制一个数组到另一个。相当于Java的System.arraycopy(src, srcPos, dest, destPos, length). |
4 | def empty[T]: Array[T] 返回长度为0的数组 |
5 | def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T] 返回一个包含一个函数的重复应用到初始值的数组。 |
6 | def fill[T]( n: Int )(elem: => T): Array[T] 返回包含某些元素的计算的结果的次数的数组。 |
7 | def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回一个二维数组,其中包含某些元素的计算的结果的次数。 |
8 | def iterate[T]( start: T, len: Int)( f: (T) => T ): Array[T] 返回一个包含一个函数的重复应用到初始值的数组。 |
9 | def ofDim[T]( n1: Int ): Array[T] 创建数组给出的尺寸。 |
10 | def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 创建了一个2维数组 |
11 | def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]] 创建3维数组 |
12 | def range( start: Int, end: Int, step: Int ): Array[Int] 返回包含一些整数间隔等间隔值的数组。 |
13 | def range( start: Int, end: Int ): Array[Int] 返回包含的范围内增加整数序列的数组。 |
14 | def tabulate[T]( n: Int )(f: (Int)=> T): Array[T] 返回包含一个给定的函数的值超过从0开始的范围内的整数值的数组。 |
15 | def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]] 返回一个包含给定函数的值超过整数值从0开始范围的二维数组。 |
- package first.scala
- import scala.collection.mutable.ArrayBuffer
- import sun.org.mozilla.javascript.internal.ast.Yield
- object ScalaInAction {
- //scala.Array
- /******************************************************************************************************************************/
- //定长数组
- //声明数组方式一:类型,大小
- val nums = new Array[Int](10) //> nums : Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
- val a = new Array[String](10) //> a : Array[String] = Array(null, null, null, null, null, null, null, null, n
- //| ull, null)
- //声明方式二:可以通过类型推断,推断出数组的类型
- val s = Array("hello" , "world") //> s : Array[String] = Array(hello, world)
- s(0) = "goodbye"
- //可变数组
- val b = ArrayBuffer[Int]() //> b : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
- b += 1 //> res0: first.scala.ScalaInAction.b.type = ArrayBuffer(1)
- b += (1,2,3,4) //> res1: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4)
- b ++= Array(12,15,63) //> res2: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4, 12, 15,
- //| 63)
- //删除最后的2个元素
- b.trimEnd(2)
- b //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4,
- //| 12)
- //给定索引处插入 数据
- b.insert(2, 15)
- b //> res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 15, 2, 3
- //| , 4, 12)
- //删除索引为2的元素
- b.remove(2) //> res5: Int = 15
- //转换为数组,类型的变换
- b.toArray //> res6: Array[Int] = Array(1, 1, 2, 3, 4, 12)
- b //> res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4,
- //| 12)
- /*******************************************************************************************************/
- //数组的进阶操作
- for(i <- 0 until a.length)
- println(i + " : " + a(i)) //> 0 : null
- //| 1 : null
- //| 2 : null
- //| 3 : null
- //| 4 : null
- //| 5 : null
- //| 6 : null
- //| 7 : null
- //| 8 : null
- //| 9 : null
- val c = Array(2,5,8,9,18) //> c : Array[Int] = Array(2, 5, 8, 9, 18)
- val result = for(elem <- c) yield 2 * elem
- //> result : Array[Int] = Array(4, 10, 16, 18, 36)
- //将c中的偶数乘2
- for(elem <- c if elem % 2 == 0 ) yield 2 * elem
- //> res8: Array[Int] = Array(4, 16, 36)
- //spark中方式,和上面的效果一样。先过滤后map
- c.filter( _ % 2 == 0).map(2 * _) //> res9: Array[Int] = Array(4, 16, 36)
- //求和
- Array(1,2,3).sum //> res10: Int = 6
- //获取最长的字符串
- ArrayBuffer("Mary", "had", "a", "little", "lamb").max
- //> res11: String = little
- //排序,默认升序排序
- val d = ArrayBuffer(1,7,2,9) //> d : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 7, 2, 9)
- val bSorted = d.sorted //> bSorted : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7,
- //| 9)
- //快速排序
- val e = Array(1,7,2,9) //> e : Array[Int] = Array(1, 7, 2, 9)
- scala.util.Sorting.quickSort(e)
- //定义元素连接方式
- e.mkString(" and ") //> res12: String = 1 and 2 and 7 and 9
- //定义元素连接方式
- a.mkString("<", "," , ">") //> res13: String = <null,null,null,null,null,null,null,null,null,null>
- /**************************************************************************************************************************/
- //定义多维数组方法: Array.ofDim[Double](3,4)
- val matrix = Array.ofDim[Double](3,4) //> matrix : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0
- //| , 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0))
- matrix(2)(1) = 42
- matrix //> res14: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0
- //| .0, 0.0, 0.0), Array(0.0, 42.0, 0.0, 0.0))
- val triangle = new Array[Array[Int]](10)
- //> triangle : Array[Array[Int]] = Array(null, null, null, null, null, null, n
- //| ull, null, null, null)
- for(i <- 0 until triangle.length)
- triangle(i) = new Array[Int](i + 1)
- triangle //> res15: Array[Array[Int]] = Array(Array(0), Array(0, 0), Array(0, 0, 0), Arr
- //| ay(0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0), Array(0, 0,
- //| 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0
- //| , 0), Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
- }
[原创]Scala学习:数组的基本操作,数组进阶操作,多维数组的更多相关文章
- [原创]Scala学习:Tuple,Array,Map ,文件操作
1.Tuple:元祖.是一个有用的容器对象. 1)特点: ① 元祖是不可变的,即,当声明完了一个元祖,那么它的长度就不可以在改变: ② 元祖可以包含不同类型的数据,对象: ③ 索引是从 '_1 ...
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
package 二维数组查找; public class Test03 { /** * 在一个二维数组中,每一行都按 package 二维数组查找; public class Test03 { /** ...
- [Swift]多维数组的表示和存储:N维数组映射到一维数组(一一对应)!
数组:有序的元素序列. 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编号称为下标.数组 ...
- JNI操作二维数组
之前的文章讲解了有关JNI使用方法,这篇文章进阶一点,介绍下JNI操作二维数组的方法.有了之前文章的操作JNI的方法,这里直接上代码了. Java代码部分 package com.testjni; p ...
- PHP操作 二维数组模拟mysql函数
PHP操作 二维数组模拟mysql函数<pre>public function monimysqltest(){ $testarray=array( array('ss'=>'1', ...
- python学习9—文件基本操作与高级操作
python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...
- 数组的三种方式总结 多维数组的遍历 Arrays类的常用方法总结
一.数组的三种声明方式总结 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] tes ...
- 【学习笔记】【C语言】二维数组
1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...
- Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组
目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...
随机推荐
- ②springMVC入门
1 1.1 需求 以案例作为驱动. springmvc和mybaits使用一个案例(商品订单管理). 功能需求:商品列表查询 1.2 环境准备 数据库环境:mysql5.1
- (转)js的call和apply
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- NRF51822之发射功率
设置蓝牙的TX Power 使用的函数sd_ble_gap_tx_power_set(int8_t tx_power); 参看例子为 S110/ble_app_proximity #define ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- Qt from Linux to Windows target
45down voteaccepted Just use M cross environment (MXE). It takes the pain out of the whole process: ...
- Cocos2d-JS工程中的文件结构
res文件夹存放资源文件 src文件夹是主要的程序代码 app.js是实现游戏场景的JavaScript文件 resource.js在src文件夹中,定义资源对应的变量 config.json保存模拟 ...
- Magento多语言功能
Magento多语言功能是建立在视图(view)基础之上的,可以通过后台创建店铺视图来创建基于Magento的多语言店铺.本文为大家讲解如何创建多语言的功能.首先,进入“管理店铺”节点,如下所示. S ...
- 在css中定义滚动条样式
1,Overflow内容溢出时的设置 overflow 水平及垂直方向内容溢出时的设置 overflow-x 水平方向内容溢出时的设置 overflow-y 垂直方向内容溢出时的设置 以上三个属性设置 ...
- UIPickerView 循环滚动(一种假象)
因为网上没有查到相关方法,故而采用一种假象的方法来实现,选项循环滚动 - (void)viewDidLoad { [super viewDidLoad]; /** UIPickerView 选择器 * ...
- JS事件分析
1.注册事件 1.1 使用HTML元素的事件属性 <div id='myDiv' style="width:100px;height:100px;background-color:re ...