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容器对象(转载)的更多相关文章

  1. Java和Scala容器转换

    参考:https://blog.csdn.net/dymkkj/article/details/77921573 Java和Scala互操作的一个重要的内容就是容器的转换,容器是一个语言的数据结构,表 ...

  2. 【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined

    手动获取容器对象时,报no qualifying bean of type is defined, 经过调查,发现手动获取的时候,该类所在的包必须经过spring容器初始化. 1.SpringConf ...

  3. C++ 容器对象vector和list 的使用

    在<<c++ primer>>第四版Exercise Section 9.3.4 的Exercise 9.20 是这样的一道题目:编写程序判断一个vector<int&g ...

  4. 获取spring容器对象方法和原因

    为什么要获取Spring容器对象:拿到spring容器对象后,你就可以用spring管理的bean了,拿到bean,自然可以使用bean的方法,场景:比如jsp页面.通过注解是无法注入bean的,在开 ...

  5. 配置Spring的用于初始化容器对象的监听器

    <!-- 配置Spring的用于初始化容器对象的监听器 --> <listener> <listener-class>org.springframework.web ...

  6. javascript客户端遍历控件与获取父容器对象

    javascript客户端遍历控件与获取父容器对象示例代码 1,遍历也面中所有的控件function findControlAll()    {        var inputs=document. ...

  7. 将Spring容器跟随系统启动并获取容器对象

    将Spring容器随系统启动的方法: 在web.xml中配置监听器,监听的对象为ContextLoaderListener <listener> <listener-class> ...

  8. 3.scala容器

    3.scala容器 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-o ...

  9. 条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》

    如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉 在STL中容器是智能的,可以在容器销毁时自动调用容器里对象的析构函数来销毁容器存储的对象. STL的容器虽然比较智能 ...

随机推荐

  1. Ajax请求参数为文件类型

    1.图片用get请求,回调函数中返回的数据就是流文件(至于是什么流文件还不清楚), 在回调函数中再使用post请求2.JS将文件像form表单一样提交到后台  :  https://www.cnblo ...

  2. Spring源码剖析2:初探Spring IOC核心流程

    本文转载自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutor ...

  3. 剑指offer——03二维数组中的查找

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...

  4. TIKA环境配置

    本章将指导完成设置Apache Tika在Windows和Linux的配置过程.用户管理是必要的,同时安装了Apache Tika. 系统要求 JDK Java SE 2 JDK 1.6 或以上 内存 ...

  5. TortoiseGit密钥设置

    需要用到TortoiseGit的puttykey generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥. 1.    安装完成TortoiseGit后 ...

  6. Centos 能ping通域名和公网ip但是网站不能够打开,服务器拒绝了请求。打开80端口解决。

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/10/29/centos-%E8%83%BDping%E9%80%9A%E5%9F%9F%E ...

  7. win7+ubuntu双系统安装

    XP+ubuntu双系统可參考 xp硬盘上安装ubuntu12.04双系统 1.XP安全不再,最终将吾等磨机的人逼上梁山,是时候做一个win7+ubuntu的双系统了. 废话少说,直接进入主题,先腾出 ...

  8. vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?

    参考博文: 解决办法:添加引用/com/Microsoft Office 11.0 Object Library 然后在程序中 C#代码 using Microsoft.Office.Interop. ...

  9. Java利用MD5WithRSA签名及DESede加密

    前言:近期公司做数据加密及签名,整理如下: 一.数字签名. 是只有信息的发送者才能产生的别人无法伪造的一段数字串,具有不可抵赖性,可验证信息完整性的一种手段. 签名不可伪造:其他人因为没有对应的私钥, ...

  10. codeforces750E New Year and Old Subsequence 矩阵dp + 线段树

    题目传送门 思路: 先看一个大牛的题解 题解里面对矩阵的构造已经写的很清楚了,其实就是因为在每个字符串都有固定的很多中状态,刚好可以用矩阵来表达,所以$(i,j)$这种状态可以通过两个相邻的矩阵的$m ...