Scala数组操作

数组要点

若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer;提供初始值时不要使用new;用()来访问元素;用for(elem<-arr)来遍历元素;用for(elem<-arr if...)...yield...来将原数组转型为新数组;Scala数组和Java数组可以互操作,用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数。

例子:

import scala.collection.mutable.ArrayBuffer;
object HelloWorld {
  def main(args: Array[String]) {
    //实现一个可变的数组(数组缓冲),以下两种方式等价
    val mutableArr = ArrayBuffer[Int]();
    val mutableArr2 = new ArrayBuffer[Int];
    mutableArr += 1; //用+=在尾端添加元素
    mutableArr +=(1, 2, 3, 4, 5) //在尾端添加多个元素,以括号括起来
    mutableArr ++= Array(8, 9, 10) //你可以使用++=操作符追加任何集合
    mutableArr.trimEnd(7) //移除最后7个元素
    println("length=" + mutableArr.length)
    println("size=" + mutableArr.size)
    print("元素=");
    for (elem <- mutableArr) {
      print(elem + " , ")
    }
  }
}

如果你需要在Array和ArrayBuffer之间转换,那么分别调用toArray()和toBuffer()方法即可。

数组转换

如下使用for推导式可以产生一个全新的数组

object HelloWorld {
  def main(args: Array[String]) {
    val a = Array(2, 3, 5, 6);
    val result = for (elem <- a) yield elem * 2
    result.copyToArray(a)
    for (elem <- a) {
      print(elem + ",") //output:4,6,10,12,
    }
  }
}

for(...)yield循环创建了一个类型与原始集合相同的新集合,如果你从数组出发,那么你得到的是另一个数组,如果你从数组缓冲出发,那么在for(...)yield之后得到的也是一个数组缓冲。可以使用如下方式来对满足一定条件的元素进行操作:

 //对元素值是偶数的进行翻倍操作,并舍弃掉值是奇数的元素
    val b = a.filter(_ % 2 == 0).map(_ * 2);
    for (elem <- b) {
      print(elem + ",")
    }

再看一个例子:

import scala.collection.mutable.ArrayBuffer
object HelloWorld {
  def main(args: Array[String]) {
    //移除除第一个负数之外的所有负数
    val a = ArrayBuffer(1, -2, 3, 5, -4, -5)
    var first = true
    //首先收集需要保留的下标,返回的结果是一个vector集合
    val indexs = for (i <- 0 until a.length if first || a(i) >= 0) yield {
      if (a(i) < 0) first = false; i
    }
    print(indexs) //output:Vector(0, 1, 2, 3)
    //然后将元素移动到该去的位置,并截断尾端
    for (j <- 0 until indexs.length) {
      a(j) = a(indexs(j))
    }
    println()
    a.trimEnd(a.length - indexs.length)
    print(a)
  }
}

多维数组

object HelloWorld {
  def main(args: Array[String]) {
    val matrix = Array.ofDim[Double](3, 4) //构造一个三行四列的二维数组
    matrix(0)(0) = 56 //访问第一个元素
    val triangle = new Array[Array[Int]](10) //创建一个十行的数组,每一行都是一个Int型的Array
    for (i <- 0 until (triangle.length)) {
      triangle(i) = new Array[Int](i + 1) //将每一行实例化成(i+1)列的二维数组
    }
    //打印数组
    for (i <- 0 until (triangle.length)) {
      for (j <- 0 until (triangle(i).length)) {
        print(triangle(i)(j) + ",")
      }
      println()
    }
  }
}

Scala数组操作

时间: 2024-10-05 09:17:49

Scala数组操作的相关文章

Scala数组操作实战详解

增删改查,要注意的是,Array数组是定长数组,ArrayBuffer数组才是变长数组. 其他集合也存在可变不可变.例如,List,Set,Map 多维数组定义方法与Java类似.

Scala 数组操作之数组转换

使用yield和函数式编程转换数组 // 对Array进行转换,获取的还是Array val a = Array(1, 2, 3, 4, 5) val a2 = for (ele <- a) yield ele * ele // 对ArrayBuffer进行转换,获取的还是ArrayBuffer val b = ArrayBuffer[Int]() b += (1, 2, 3, 4, 5) val b2 = for (ele <- b) yield ele * ele // 结合if守卫,仅转

4、scala数组

1.Array 2.ArrayBuffer 3.遍历Array和ArrayBuffer 4.数组常见操作 1.  Array Scala中,array代表的含义与java类似,也是长度不可改变的数组.由于scala与java都是运行在jvm中,双方可以相互调用,scala数组的底层实现实际上是java数组. 2.ArrayBuffer Scala中,如果需要长度可变的集合类,可以使用ArrayBuffer.使用前需要导入 scala.collection.mutable.ArrayBuffer.

Scala数组和集合

一.scala数组 数组定义1: var arr = new Array[String](3) String:存储的元素类型 3:存储3个元素 添加元素: arr(1) = "hello" 数组定义2: val arr1 = Array[Int](1,2,3,4,5,6) 改变内容:arr1(1) = 18 添加元素:arr1 += 22 长度不可以改变 二.数组方法 1.map(映射) 映射: 2 4 6 映射关系:f(x) = x*5 对应映射关系:10 20 30 例: scal

PHP:数组操作函数array_count_values()的实现

    PHP作为一门弱类型的脚本语言,其变量无需声明,即用即得,其数组更是与其他强类型语言相差巨大,比如PHP数组中的关联键和数值键,其中最有趣的莫过于关联键了,这是在C++或JAVA中无法见到的,而且PHP还提供诸多强大的数组操作函数,比如   array_values()//可以剥离数组中的关联键和数值键,或得有其元素的值所组成的数组 array_keys()//获得所有的关联键和数值键  利用这两个函数就可以非常方便简单的实现  array_count_values()函数  思路就是先

PHP内核探索之变量(4) - 数组操作

上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪. 本文主要内容: PHP中提供的数组操作函数 数组操作函数的实现 结语参考文献 一.PHP中提供的数组操作函数 可以说,数组是PHP中使用最广泛的数据结构之一,正因如此,PHP为开发者提供了丰富的数组操作函数(参见http://cn2.php.net/manual/en/ref.array.php

scala数组

#scala数组 val A= new Array[T](N) val A = new Array[Int](10) ##变长数组 import scala.collection.mutable.ArrayBuffer val C = new ArrayBuffer[T]() C += e1 C += (e2,e3) C++ = Array(e2,e3) trimEnd(2)  #移除最后2个 C.insert(2,e3) C.remove(3,2) #转换 D=C.toArray    #变长

PHP:常用PHP数组操作函数

php为我们提供了丰富的数组操作函数,用这些函数可以非常方便的实现我们所想实现的功能. 添加和删除数组元素 添加元素的方法 array_unshift(array array,mixed var [,mixed var...]) 在数组头添加元素,所有的数值键会被相应的修改,但关联键不会受到影响 array_push(array array,mixed var [,mixed var.....]) 在数组尾添加元素 删除数组元素的方法 array_shift(array array) 删除数组头

js数组操作

js数组操作大全(转) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1 unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,2,3,4,5]; var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7 注:在IE6.0下测试返回值总为undefined,FF2.0下测试