在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)

不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的

可变数组指的是长度和数组中角标对应的元素都是可变的。

  1. object ArrayDemo {
    def main(args: Array[String]): Unit = {
    /**
    * 不可变数组一旦初始化,数组的长度就是不可变的,不能往数组中添加任
    * 何元素
    */
    val arr = Array[Int](1, 2, 3, 4, 5)
  2.  
  3. // 如果数组中,有不同类型的元素,那么这个数组的类型就是这些元素的公共父类型 Any
    val arr1: Array[Any] = Array(1, 2, "leo")
  4.  
  5. // 创建了一个数组,给数组的初始化长度为5,每个角标的初始长度和泛型的初始值一致,也就是 0
    val arr2 = new Array[Int](5)
  6.  
  7. // 创建一个数组,数组的长度是 1 ,数组的元素是 5
    val arr3 = Array(5)
  8.  
  9. // ++ 运算符合并两个数组,原来的数组并没有改变,只是生成了个新的数组。
    val arr4 = arr ++ arr2
  10.  
  11. /**
    * 可变长数组
    */
    val buffer1 = ArrayBuffer[Int]()
    buffer1 += 1
    buffer1 ++= arr
    buffer1 ++= ArrayBuffer(6, 7, 8) // 添加数组
  12.  
  13. // 更改指定角标的值
    buffer1(1) = 11
  14.  
  15. // append 方式添加
    buffer1.append(12, 13, 14)
    buffer1 -= 12
    println(buffer1) // ArrayBuffer(1, 11, 2, 3, 4, 5, 6, 7, 8, 13, 14)
  16.  
  17. // 移除数组 如果要移除的元素不存在,不会报错
    buffer1 --= Array(1, 2, 15)
    println(buffer1) // ArrayBuffer(11, 3, 4, 5, 6, 7, 8, 13, 14)
  18.  
  19. // 移除指定下表对应的元素
    buffer1.remove(5)
  20.  
  21. // 从指定角标开始移除指定个元素
    buffer1.remove(3, 2)
    }
    }
  1. /**
  2. * 数组的常用方法
  3. */
  4. val arr = Array(1, 2, 3, 4, 5)
  5.  
  6. // 最大值
  7. println(arr.max)
  8. // 最小值
  9. println(arr.min)
  10. //maString 拼接
  11. println(arr.mkString("")) // 12345
  12. println(arr.mkString(",")) // 1,2,3,4,5
  13. println(arr.mkString("[", ",", "]")) //[1,2,3,4,5]
  1. /**
  2. * 数组的转换操作
  3. */
  4. val intarr = Array(1,2,3,12,5,7)
  5.  
  6. intarr.map((x: Int)=> x * 2)
  7. .sortBy((x: Int)=> x) //排序
  8. .reverse // 将数组反转
  9. .foreach((x:Int)=>println(x))
  10.  
  11. intarr.map(_ * 2).sortBy(x =>x).reverse.foreach(println(_))
  12.  
  13. var strarr = Array("hello world","hello china")
  14. strarr.map(x => {
  15. val fields = x.split(" ")
  16. fields
  17. }).flatten.foreach(println(_))
  18.  
  19. strarr.flatMap((x: String)=>{x.split(" ")}).foreach(println(_))

相关:

  1. 1foreach
  2. foreachmap相似,只不过它没有返回值,foreach只要是为了对参数进行作用。
  3.  
  4. 比如 names.foreach{name=>println(name)}
  5.  
  6. 2flatten
  7. flatten可以把嵌套的结构展开.
  8.  
  9. scala> List(List(1,2),List(3,4)).flatten
  10. res0: List[Int] = List(1, 2, 3, 4)
  11.  
  12. 3flatmap
  13. flatMap结合了mapflatten的功能。接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。
  14.  
  15. scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))
  16. res5: List[Int] = List(2, 4, 6, 8)

scala (4) 可变数组和不可变数组的更多相关文章

  1. 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...

  2. OC基础 可变数组与不可变数组的使用

    OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...

  3. Chapter5_初始化与清理_数组初始化与可变参数列表

    一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...

  4. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  5. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  6. Scala进阶之路-高级数据类型之数组的使用

    Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...

  7. scala可变var与不可变val的理解

    我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...

  8. Scala 学习之路(四)—— 数组Array

    一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...

  9. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

随机推荐

  1. Python学习---文件操作的学习1208

    1.1. 对文件操作基本操作: 操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 注意:pyton中操作的文件是utf8保存的,打开文件时open函数是通过操作系统 ...

  2. Java学习---连接数据库操作

    Java连接Oracle数据库 package com.ftl.mysql; import java.sql.Connection; import java.sql.DriverManager; im ...

  3. npm WARN network …… request to https://cnpmjs.…… failed, reason: socket hang up

    出现类似问题的原因是由于之前配置了镜像导致的 解决方案:删掉镜像,使用npm本身进行安装 删除镜像的命令: 方法1: npm config delete registry 方法2: npm confi ...

  4. myeclipse 2013破解注册图文教程

    以下这个试过有效 http://www.33lc.com/article/10792.html

  5. 创建工程支持scala代码开发

    第一步:idea当中创建创建普通maven工程 File ==> New ==> Project 第二步:修改pom.xml添加scala的版本以及打包插件 <dependencie ...

  6. error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.co

    Win10,也重新装了免费版的Visual Studio 2013 y,写MFC程序时候发现这样的提示: error MSB8031: Building an MFC project for a no ...

  7. 041队列queue(重要,多线程使用)

    内容:队列类型.方法.使用 ###############queue定义了3种信息列队模式类Queue([maxsize]):FIFO列队模式LifoQueue([maxsize]):LIFO列队模式 ...

  8. eclipse git 解决冲突

    1,team->synchronize workspace 2, merge tool 合并本地版本 3,add to git index 4,commit 5,push

  9. Linux学习总结(十八)几个简单的文本处理工具cut sort tr split

    1 命令cut 用来截取某一个字段格式 : cut -d '分隔符' [-cf] n, n为数字,表示第几段-d:后面跟分隔符,分割符要加单引号-c:后面接的是第几个字符-f:后面接的是第几段那么意思 ...

  10. 5、Android-跨程序共享数据--内容提供器

    Android数据持久化技术:文件存储.SharedPreferences存储.数据库存储 使用这些持久化技术保存的数据只能再当前的应用程序中访问 但是对于不同应用之间的可以实现跨程序数据共享的功能 ...