scala容器对象(转载)
1Array 数组
Scala的数组是这个样子:
val arr = new Array[String](3)
程序员们基本都看得懂,new 一个Array对象,它的类型是String,长度为3。对元素赋值的操作如下:
arr(0) = "alan"
arr(1) = "stef"
arr(2) = "boy"
和Java的不大一样,java是用[]来表示数组元素位置,而scala的赋值其实就是一个update方法了,方法当然是用小括号了。
变量(参数) 表示:变量.apply(参数)
变量(参数)=XX 表示:变量.update(参数,XX)
下面是遍历元素:
for (i <- 0 to 2)
print(arr(i))
其中 0 to 2 中是数字0调用to方法,to方法的参数是2。
看一下一个更简洁的方法来创建数组:
val numNames = Array("zero", "one", "two")
scala的类型推断会断定 numNames 的类型为 Array[String],同样也可以理解为 Array.apply(XXX)。
2List
scala中,Array和List很重要的区别是:Array是可变对象,虽然其长度不可变,但是它的每个元素都可以更换,而其对象仍然是一个对象;List是不可变对象,创建后你对它进行任何更系操作,返回的都是一个新的List,就像java中的String对象一样。所以,List是设计给函数式编程使用的。
List和Array一样,元素必须要具有相同的类型。
List[T] 来说,如果其类型T有继承关系,那么List[T]也有继承关系,就是说List[Object]是List[Int]的超类。
空的List(List())的类型是Nothing。
val empty: List[Nothing] = List()
2.1创建
看一下如何创建一个List:
val oneTwoThree = List(1, 2, 3)
2.2合并List
一个叫做“:::”的方法,可以把两个List连接在一起。
val oneTwo = List(1, 2)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour // List(1, 2, 3, 4)
还有一个双冒号“::”的方法用来连接一个元素和List,这个元素会在List的最前端:
val twoThree = List(2, 3)
val oneTwoThree = 1 :: twoThree // List(1, 2, 3)
有一点要说明,上面的方法(::)是List的方法,虽然List在方法的左边。稍微追究一下就是已冒号结尾的方法名会被方法的右操作参数调用,其他时候是被左操作参数调用的。
这个方法配合Nil可以定义List:
val oneTwoThree = 1 :: 2 :: 3 :: Nil
2.3append?
由于效率原因,List没有提供append操作(随着列表变长其操作耗时会线性增长),而::花费常量时间。所以需要append时,可以reverse、::、reverse。也可已使用ListBuffer类,使用之后提供toList进行转换。
2.4基础操作
2.4.1(int)
相当于get,返回索引上的元素,索引是从0开始计算的。
2.4.2count
获取元素个数。
thrill.count(s => s.length == 4)
上面计算长度为4的元素的个数。
2.4.3drop(int)
去掉前面几个元素
2.4.4dropRight(int)
去掉后面几个元素
2.4.5exists
thrill.exists(s => s == "until")
判断是否存在某个元素。
2.4.6filter
thrill.filter(s => s == "until")
过滤元素
2.4.7forall
thrill.forall(s => s == "until")
判断是不是所有元素都是util。
2.4.8foreach
thrill.foreach(s => print(s))
便利元素执行操作。
2.4.9head
返回第一个元素,无参函数
2.4.10init
出去最后一个元素之外的所有的元素。
2.4.11isEmpty
2.4.12last
2.4.13length
2.4.14map
加工元素,返回一个新的List。
thrill.map(s => s + "y")
2.4.15mkString
用指定分割符号连接所有元素,返回字符串。
thrill.mkString(", ")
2.4.16remove
删除部分元素
thrill.remove(s => s.length == 4)
2.4.17reverse
2.4.18sort
排序
thrill.sort((s, t) =>
s.charAt(0).toLowerCase <
t.charAt(0).toLowerCase)
2.4.19tail
返回去掉第一个元素的所有元素。
scala容器对象(转载)的更多相关文章
- Java和Scala容器转换
参考:https://blog.csdn.net/dymkkj/article/details/77921573 Java和Scala互操作的一个重要的内容就是容器的转换,容器是一个语言的数据结构,表 ...
- 【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined
手动获取容器对象时,报no qualifying bean of type is defined, 经过调查,发现手动获取的时候,该类所在的包必须经过spring容器初始化. 1.SpringConf ...
- C++ 容器对象vector和list 的使用
在<<c++ primer>>第四版Exercise Section 9.3.4 的Exercise 9.20 是这样的一道题目:编写程序判断一个vector<int&g ...
- 获取spring容器对象方法和原因
为什么要获取Spring容器对象:拿到spring容器对象后,你就可以用spring管理的bean了,拿到bean,自然可以使用bean的方法,场景:比如jsp页面.通过注解是无法注入bean的,在开 ...
- 配置Spring的用于初始化容器对象的监听器
<!-- 配置Spring的用于初始化容器对象的监听器 --> <listener> <listener-class>org.springframework.web ...
- javascript客户端遍历控件与获取父容器对象
javascript客户端遍历控件与获取父容器对象示例代码 1,遍历也面中所有的控件function findControlAll() { var inputs=document. ...
- 将Spring容器跟随系统启动并获取容器对象
将Spring容器随系统启动的方法: 在web.xml中配置监听器,监听的对象为ContextLoaderListener <listener> <listener-class> ...
- 3.scala容器
3.scala容器 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-o ...
- 条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》
如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能 ...
随机推荐
- HBase自定义MapReduce
HBase表数据的转移 在Hadoop阶段,我们编写的MR任务分别进程了Mapper和Reducer两个类,而在HBase中我们需要继承的是TableMapper和TableReducer两个类. 目 ...
- python 读取设备的另一个方法
import time,sys templist = []#设置一个空列表,用来放设备内容deviceslist =[]#设置一个空列表,用来放分割后的设备内容devices = [] #设置一 ...
- yang文件语法格式
前言 NETCONF(Network Configuration Protocol),该协议的配置功能非常强大,同时兼顾监控和故障管理,安全验证和访问控制,得到业界的一致认可,被广泛用来配置网络 NE ...
- TFS 中如何将项目加入已有的源代码管理器中?
Visual Studio 的某解决方案已经加入 Team Foundation Server,现在再将已经存在的项目加入到解决方案中,可是签入时,并没有把新加入的项目签入,怎么办呢? 在团队资源管理 ...
- C++——decltype
, &cj=ci; decltype(ci) x=;//x的类型是const int decltype(cj) y=x;//y的类型是const int & decltype(cj) ...
- 5. Python数据类型之元组、集合、字典
元组(tuple) 元组创建很简单,只需要在小括号中添加元素,并使用逗号隔开即可.与列表不同的是,元组的元素不能修改.如下代码所示: tup1 = () tup2 = (1) tup3 = (1,) ...
- 人工智能都能写Java了!这款插件让你编程更轻松
最近在浏览技术社区,发现了一款 IDE 插件,利用人工智能技术帮助程序员高效写代码.节省开发时间,一下子勾起了我的好奇心. 下载之后,使用一番,确实蛮好的,可以有效提升编程效率. 这款插件叫:aixc ...
- 42-Ubuntu-用户管理-07-修改权限命令介绍
修改文件权限 序号 命令 作用 01 chown 修改文件/目录拥有者 02 chgrp 修改文件/目录所在主组 03 chmod 修改文件/目录权限 chmod chown chgrp ...
- zabbix--监控的组件和进程介绍
上图是zabbix的架构,zabbix proxy(代理),可以减小IO并发. zabbix web GUI是用php写的画图工具,从数据库抓取数据. zabbix database zabbix获取 ...
- 让微信小程序页面之间的通信不在变得困难
一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品 ...