[原创]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开始范围的二维数组。


  1 package first.scala
  2
  3 import scala.collection.mutable.ArrayBuffer
  4 import sun.org.mozilla.javascript.internal.ast.Yield
  5
  6 object ScalaInAction {
  7  //scala.Array
  8
  9     /******************************************************************************************************************************/
 10     //定长数组
 11     //声明数组方式一:类型,大小
 12     val nums = new Array[Int](10)                 //> nums  : Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 13     val a = new Array[String](10)                 //> a  : Array[String] = Array(null, null, null, null, null, null, null, null, n
 14                                                   //| ull, null)
 15     //声明方式二:可以通过类型推断,推断出数组的类型
 16     val s = Array("hello" , "world")              //> s  : Array[String] = Array(hello, world)
 17
 18     s(0) = "goodbye"
 19
 20
 21     //可变数组
 22    val b = ArrayBuffer[Int]()                     //> b  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
 23
 24     b += 1                                        //> res0: first.scala.ScalaInAction.b.type = ArrayBuffer(1)
 25     b += (1,2,3,4)                                //> res1: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4)
 26     b ++= Array(12,15,63)                         //> res2: first.scala.ScalaInAction.b.type = ArrayBuffer(1, 1, 2, 3, 4, 12, 15,
 27                                                   //| 63)
 28     //删除最后的2个元素
 29     b.trimEnd(2)
 30     b                                             //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4,
 31                                                   //|  12)
 32     //给定索引处插入 数据
 33     b.insert(2, 15)
 34     b                                             //> res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 15, 2, 3
 35                                                   //| , 4, 12)
 36
 37    //删除索引为2的元素
 38     b.remove(2)                                   //> res5: Int = 15
 39
 40     //转换为数组,类型的变换
 41     b.toArray                                     //> res6: Array[Int] = Array(1, 1, 2, 3, 4, 12)
 42     b                                             //> res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2, 3, 4,
 43                                                   //|  12)
 44
 45     /*******************************************************************************************************/
 46     //数组的进阶操作
 47
 48     for(i <- 0 until a.length)
 49         println(i + " : " + a(i))                 //> 0 : null
 50                                                   //| 1 : null
 51                                                   //| 2 : null
 52                                                   //| 3 : null
 53                                                   //| 4 : null
 54                                                   //| 5 : null
 55                                                   //| 6 : null
 56                                                   //| 7 : null
 57                                                   //| 8 : null
 58                                                   //| 9 : null
 59
 60
 61     val c = Array(2,5,8,9,18)                     //> c  : Array[Int] = Array(2, 5, 8, 9, 18)
 62          val  result = for(elem <- c) yield 2 * elem
 63                                                   //> result  : Array[Int] = Array(4, 10, 16, 18, 36)
 64
 65     //将c中的偶数乘2
 66     for(elem <- c if elem % 2 == 0 ) yield 2 * elem
 67                                                   //> res8: Array[Int] = Array(4, 16, 36)
 68
 69     //spark中方式,和上面的效果一样。先过滤后map
 70     c.filter( _ % 2 == 0).map(2 * _)              //> res9: Array[Int] = Array(4, 16, 36)
 71
 72     //求和
 73     Array(1,2,3).sum                              //> res10: Int = 6
 74
 75
 76     //获取最长的字符串
 77     ArrayBuffer("Mary", "had", "a", "little", "lamb").max
 78                                                   //> res11: String = little
 79
 80     //排序,默认升序排序
 81     val d = ArrayBuffer(1,7,2,9)                  //> d  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 7, 2, 9)
 82     val bSorted = d.sorted                        //> bSorted  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7,
 83                                                   //|  9)
 84
 85     //快速排序
 86     val e = Array(1,7,2,9)                        //> e  : Array[Int] = Array(1, 7, 2, 9)
 87     scala.util.Sorting.quickSort(e)
 88
 89     //定义元素连接方式
 90     e.mkString(" and ")                           //> res12: String = 1 and 2 and 7 and 9
 91     //定义元素连接方式
 92     a.mkString("<", "," , ">")                    //> res13: String = <null,null,null,null,null,null,null,null,null,null>
 93
 94
 95   /**************************************************************************************************************************/
 96
 97
 98       //定义多维数组方法: Array.ofDim[Double](3,4)
 99     val matrix = Array.ofDim[Double](3,4)         //> matrix  : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0
100                                                   //| , 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0))
101     matrix(2)(1) = 42
102
103     matrix                                        //> res14: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0
104                                                   //| .0, 0.0, 0.0), Array(0.0, 42.0, 0.0, 0.0))
105         val triangle = new Array[Array[Int]](10)
106                                                   //> triangle  : Array[Array[Int]] = Array(null, null, null, null, null, null, n
107                                                   //| ull, null, null, null)
108
109
110         for(i <- 0 until triangle.length)
111             triangle(i) = new Array[Int](i + 1)
112             triangle                  //> res15: Array[Array[Int]] = Array(Array(0), Array(0, 0), Array(0, 0, 0), Arr
113                                                   //| ay(0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0), Array(0, 0,
114                                                   //| 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0
115                                                   //| , 0), Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
116
117
118
119
120 }



				
时间: 2024-11-06 22:45:11

[原创]Scala学习:数组的基本操作,数组进阶操作,多维数组的相关文章

[原创]Scala学习:Tuple,Array,Map ,文件操作

1.Tuple:元祖.是一个有用的容器对象. 1)特点:  ① 元祖是不可变的,即,当声明完了一个元祖,那么它的长度就不可以在改变:  ② 元祖可以包含不同类型的数据,对象:   ③ 索引是从 '_1' 开始,读取元祖中的内容 ④标识:' () ' 2)代码 1 //元祖 2 def doTuple() { 3 //'()' 定义元祖 4 val pair = (100, "scala", "spark") //元祖的类型val pair: (Int, String

【学习笔记】【C语言】二维数组

1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是一个特殊的一维数组:它的元素是一维数组.例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素 2.二维数组的定义 二维数组定义的一般形式是:     类型说明符 数组名[常量表达式1][常量表达式2] 其中常量表达式1表示第一维下标的

【剑指Offer学习】【面试题3 :二维数组中的查找】

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. public class Test03 { /** * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. * <p/> * 规律:首先选取数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束:

数组 两种初始化方式及二维数组

数组: 静态数组  和  动态数组 1.写法: 定义:用来存储一组相同数据类型的元素 * * * * *   数组中存储的元素必须是相同的数据类型 数组的声明  初始化 Int[] a={1,2,3,4}; 数组的初始化: 静态初始化: //方式1 int[] a={'a',2,3,34,3,4,5,6,7,8,7,8,9,0,4,5,6,7,8};//声明的同时初始化 double[] a1={1.2f}; //方式2 int b[]={1,2,3,4}; //方式3: int[] c;  

c语言中如何通过二级指针来操作二维数组

通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅助理解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h>//输入输出头文件. #include <stdlib.h>//本程序需要用到malloc/free函数,引

jQuery写省级联动列表,创造二维数组,以及如何存/调用二维数组中的数据

jQuery写省级联动列表,创造二维数组来存放数据,然后通过each来遍历调用,通过creatTxtNode创建文本节点,通过createElement创建标签option,在通过append将文本写入option,再通过appendTo将文本追加到id为city的市级列表中 代码如下: jquery部分: 1 <script src="js/jquery-1.8.3.js" type="text/javascript" charset="utf-8

[原创]Scala学习:编写Scala脚本

scala支持脚本 1)在/opt/scala-script下创建一个文件hello.scala 编辑内容如下: $ hello ,this is the first scala script 2)运行脚本 scala脚本的命令行参数保存在名为args的scala数组中.scala里,数组以0开始,可以通过在括号里指定索引值来访问数组元素.scala里数组 args 的第一个元素是:args(0),而不是像Java那样的:args[0].现在,把以下内容写到新文件: HelloWithArgs.

[原创]Scala学习:关于变量(val,var,类型推断)

1.常量定义:  val val 类似于java中的final变量.一旦初始化了,val就不能再被赋值 val megs = "hello world" 2.变量的定义: var var 如同java里面的非final变量,可以在它的声明周期内多次被赋值 var spark:String = " i am big data " var spark: String = " i am" 解释器中支持table键 补充和提示 3.变量类型推断: 当分配

[原创]Scala学习:函数的定义

方式一:标准的定义函数 def 函数名(参数1: 参数类型,参数2: 参数类型): 返回值类型 = { 函数体 } 例子 def max(x: Int,y: Int): Int ={ if(x > y) x else y } 注意:参数列表中必须标注好参数类型,因为scala编译器无法推断参数的类型 方式二:在一般的情况下可以省略,函数返回值的类型 def 函数名(参数1: 参数类型,参数2: 参数类型) = { 函数体 } def max(x: Int,y: Int)={ if(x > y)