scala (4) 可变数组和不可变数组
在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)
不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的
可变数组指的是长度和数组中角标对应的元素都是可变的。
object ArrayDemo {
def main(args: Array[String]): Unit = {
/**
* 不可变数组一旦初始化,数组的长度就是不可变的,不能往数组中添加任
* 何元素
*/
val arr = Array[Int](1, 2, 3, 4, 5) // 如果数组中,有不同类型的元素,那么这个数组的类型就是这些元素的公共父类型 Any
val arr1: Array[Any] = Array(1, 2, "leo") // 创建了一个数组,给数组的初始化长度为5,每个角标的初始长度和泛型的初始值一致,也就是 0
val arr2 = new Array[Int](5) // 创建一个数组,数组的长度是 1 ,数组的元素是 5
val arr3 = Array(5) // ++ 运算符合并两个数组,原来的数组并没有改变,只是生成了个新的数组。
val arr4 = arr ++ arr2 /**
* 可变长数组
*/
val buffer1 = ArrayBuffer[Int]()
buffer1 += 1
buffer1 ++= arr
buffer1 ++= ArrayBuffer(6, 7, 8) // 添加数组 // 更改指定角标的值
buffer1(1) = 11 // append 方式添加
buffer1.append(12, 13, 14)
buffer1 -= 12
println(buffer1) // ArrayBuffer(1, 11, 2, 3, 4, 5, 6, 7, 8, 13, 14) // 移除数组 如果要移除的元素不存在,不会报错
buffer1 --= Array(1, 2, 15)
println(buffer1) // ArrayBuffer(11, 3, 4, 5, 6, 7, 8, 13, 14) // 移除指定下表对应的元素
buffer1.remove(5) // 从指定角标开始移除指定个元素
buffer1.remove(3, 2)
}
}
/**
* 数组的常用方法
*/
val arr = Array(1, 2, 3, 4, 5) // 最大值
println(arr.max)
// 最小值
println(arr.min)
//maString 拼接
println(arr.mkString("")) // 12345
println(arr.mkString(",")) // 1,2,3,4,5
println(arr.mkString("[", ",", "]")) //[1,2,3,4,5]
/**
* 数组的转换操作
*/
val intarr = Array(1,2,3,12,5,7) intarr.map((x: Int)=> x * 2)
.sortBy((x: Int)=> x) //排序
.reverse // 将数组反转
.foreach((x:Int)=>println(x)) intarr.map(_ * 2).sortBy(x =>x).reverse.foreach(println(_)) var strarr = Array("hello world","hello china")
strarr.map(x => {
val fields = x.split(" ")
fields
}).flatten.foreach(println(_)) strarr.flatMap((x: String)=>{x.split(" ")}).foreach(println(_))
相关:
1、foreach
foreach和map相似,只不过它没有返回值,foreach只要是为了对参数进行作用。 比如 names.foreach{name=>println(name)} 2、flatten
flatten可以把嵌套的结构展开. scala> List(List(1,2),List(3,4)).flatten
res0: List[Int] = List(1, 2, 3, 4) 3、flatmap
flatMap结合了map和flatten的功能。接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。 scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))
res5: List[Int] = List(2, 4, 6, 8)
scala (4) 可变数组和不可变数组的更多相关文章
- 【转】不可变数组NSArray与可变数组NSMutableArray
原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...
- OC基础 可变数组与不可变数组的使用
OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- Scala进阶之路-高级数据类型之数组的使用
Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...
- scala可变var与不可变val的理解
我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...
- Scala 学习之路(四)—— 数组Array
一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
随机推荐
- centos6.3_gcc安装软件及流程
分享链接下载文件上传安装即可 链接:https://pan.baidu.com/s/15eUhm9LTUdHDPkXOyRb9Tg 密码:tohr # 文件内置安装脚本,直接安装即可 [root@lo ...
- C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别
多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值 ...
- CentOS使用PXE网络启动自动安装操作系统
PXE工作原理简介 PXE (Preboot Excution Environment) 预启动执行环境 工作环境介绍: 要实现PXE自动网络安装CentOS至少需要两台主机 1)PXE服务器PXE ...
- [BZOJ 1592] Making The Grade路面修整
1592: [Usaco2008 Feb]Making the Grade 路面修整 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 704 Solv ...
- MVC与EF结合:Contoso大学
中文教程 1.通过 MVC 5 使用 Entity Framework 6 Code First 入门 https://docs.microsoft.com/zh-cn/aspnet/mvc/over ...
- Kafka生产者producer简要总结
Kafka producer在设计上要比consumer简单,不涉及复杂的组管理操作,每个producer都是独立进行工作的,与其他producer实例之间没有关联.Producer的主要功能就是向某 ...
- [Assignment] C++2
作业要求:PAT1025 翻转链表 代码在这里
- JavaBean 规范
JavaBean是公共Java类,需要满以下条件: 1.所有属性为private2.提供默认无参构造方法3.提供getter和setter4.实现serializable接口 具体为: (1)Java ...
- Linux下的MBR分区
MBR分区 下面讲一讲如何给一块新添加入服务器的硬盘做MBR分区,那么为什么叫做MBR分区呢?后面会讲 做MBR分区,使用系统自带的fdisk工具.先看一看什么是fdisk,在命令行输入“fdisk” ...
- [枫叶学院] Unity3d高级开发教程 工具集(一) 哈希列表——强大的自己定义数据集
在日常开发中.数据集合是我们不可缺少的重要工具之中的一个.在C#中,.Net Framework也为我们提供了种类繁多,功能多样的数据集工具.在此,我基于List<T> 和 HashTab ...