`
alanland
  • 浏览: 641253 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

scala容器对象 - 1

阅读更多

编程语言中容器对象总是很重要的一块东西,记得java开发时用的最多的就是List什么的。学习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中,ArrayList很重要的区别是:Array是可变对象,虽然其长度不可变,但是它的每个元素都可以更换,而其对象仍然是一个对象;List是不可变对象,创建后你对它进行任何更系操作,返回的都是一个新的List,就像java中的String对象一样。所以,List是设计给函数式编程使用的。

ListArray一样,元素必须要具有相同的类型。

List[T] 来说,如果其类型T有继承关系,那么List[T]也有继承关系,就是说List[Object]List[Int]的超类。

空的ListList())的类型是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

返回去掉第一个元素的所有元素。

0
3
分享到:
评论

相关推荐

    Scala 编程中文版-前13章

    #### 三、Scala数据结构和容器 - **列表(List)**:Scala中提供了多种列表的操作方法,如`::`操作符用于列表的拼接。 - **数组(Array)**:通过代码示例展示了如何在Scala中创建和初始化数组。 - **元组(Tuple)**:...

    scala-spray-demo

    1. **服务定义**:在Scala代码中,使用Spray的`Route`对象定义了HTTP端点,通过组合各种HTTP操作(如`get`, `post`等)和路径匹配规则来构建服务。 2. **Swagger注解**:在API方法上添加Swagger注解,描述每个端点的...

    Scala 专题教程 - Case Class和模式匹配-内含源码以及设计说明书(可以自己运行复现).zip

    Option是Scala中的一个容器类,表示可能为空或存在的值。它有两种类型:`Some[T]`表示存在值,`None`表示没有值。Option是安全处理null的好方法,可以避免空指针异常。 在压缩包中的文档,如"1.模式的种类.md"、"3....

    scala-slack-bot-example

    1. **Scala基础知识** - **类型系统**:Scala具有强大的静态类型系统,能够防止运行时错误,并提供更好的代码可读性。 - **模式匹配**:Scala中的模式匹配允许我们对数据进行解构,是处理复杂数据结构的强大工具。...

    Akka Scala文档

    - **ActorSystem**:包含多个 Actor 的容器。 - **Message**:Actor 之间通信的基本单位。 - **Supervisor Strategy**:用于处理 Actor 故障的策略。 ##### 2.2 Actor Systems - **创建 ActorSystem**:通过 `...

    ScalaTutorial-zh_CN

    Scala是一种融合了面向对象和函数式编程特性的现代编程语言。它旨在提供一种更加简洁、高效和安全的方式来构建复杂的软件系统。本教程专为已有一定编程经验、特别是熟悉Java语言的程序员设计,帮助他们快速上手Scala...

    play-scala-isolated-slick-example:示例Play Slick项目

    它支持Scala和Java,让开发者可以使用函数式编程和面向对象编程的特性。 2. **Scala语言**:一种多范式的编程语言,结合了面向对象和函数式编程。它的类型系统和表达能力强大,是构建复杂Web应用的理想选择。 3. *...

    beginners-guide-to-scala

    Scala是一种多范式编程语言,它将面向对象编程和函数式编程相结合。本文档提供了一个Scala初学者指南,涵盖了Scala的核心概念和特性,帮助读者理解并掌握Scala的用法。 首先,Scala拥有强大的模式匹配功能,它能够...

    play-scala-macwire-di-example:使用Macwire进行编译时DI的示例项目

    Play默认使用Guice作为其DI容器,但也可以通过插件切换到其他容器,如Macwire。使用Macwire的优点在于它可以在编译时检查依赖关系,避免了运行时错误,同时提供了更简洁的代码。 **Macwire的使用** 在`play-scala-...

    Programming in scala-3rd.pdf

    Scala是一种多范式编程语言,它将面向对象编程和函数式编程结合起来,让开发者可以在同一个项目中,甚至在同一个代码文件中使用这两种范式。Scala语言的设计注重简洁性和表达力,同时也提供了强大的类型系统和抽象...

    programming in scala, 3nd edition

    - **Scala**是一种多范式编程语言,它融合了面向对象编程和函数式编程的特点。Scala语言的设计旨在提高代码的可读性和表达能力,同时保持高性能。 - Scala运行在Java平台上,并且与Java语言完全兼容,这意味着可以...

    scala-with-cats-exercises:“ Scala with Cats”一书中的练习

    1. **Functors**:Functors是能够将函数应用于容器中的值的类型类。在Cats中,`Functor`接口定义了一个`map`方法,可以将函数应用于一个容器(如List、Option或Either)中的元素,而不会改变容器本身的结构。 2. **...

    Scala容器的核心编程.pdf

    JAVA 程序设计师的 SCALA 入门教学, 此教学将对 Scala 语言以及编译器做一个简易介绍。设定的读者为具有程设经验且想要看 Scala 功能概要的人。内文假设读者有着基本、特别是 Java 上的对象导向程设知识。

    scala-modules-talk

    包是一种命名空间,用于避免命名冲突,而对象则可以看作是单例类,它们是代码的容器,可以包含方法、变量和其他对象。通过包对象,我们可以创建包级别的常量和函数,这在大型项目中特别有用,因为它们提供了一种全局...

    快学Scala-[中文]

    9. **Option 类型**:Option 是 Scala 为避免空指针异常而引入的容器类,它可以包含 Some 值或 None,从而强制开发者显式处理可能的缺失值。 10. **Type Classes**:虽然 Scala 不直接支持类型类,但可以通过隐式...

    scala-stm_2.10.0-M7-0.6.zip

    Jetty是一个轻量级、高性能的Java web服务器和Servlet容器,而Jetty NoSQL Memcached是Jetty的一个扩展,它允许将用户会话数据存储在Memcached这种分布式内存对象缓存系统中,从而提高了会话数据的访问速度和可伸缩...

    scala-with-cats:scala with cats一书的笔记,习题

    Scala是一种强大的、面向对象的编程语言,它集成了函数式编程的特点,被广泛应用于大数据处理、分布式计算和Web开发等领域。Cats是Scala生态系统中的一个核心库,专注于提供类型类和Monad等抽象,用于构建类型安全、...

    scala-2.13.7.tgz

    1. **类型系统**:Scala的类型系统非常强大,支持静态类型和类型推断。它包括类、接口、特质(trait)以及模式匹配等概念,允许编写出高度抽象和模块化的代码。 2. **函数式编程**:Scala是函数式编程的首选语言之...

    sample-scala-project

    Scala是一种强大的、面向对象和函数式的编程语言,它结合了Java虚拟机(JVM)的高效性与现代编程范式,使得开发者能够写出更加简洁且高效的代码。 在描述中提到的“标本项目”,意味着这个项目是为了教学或实验目的...

    《scala语言规范.pdf 》中文、英文版 《scala程序设计》pdf、epub格式 低分打包下载

    1. **Scala语言规范**: - Scala语言规范是Scala编程的基础,它定义了语言的所有语法和语义,包括类型系统、类和对象、函数和方法、模式匹配、并发等核心概念。 - 《Scala语言规范.pdf》是这个规范的中文译版,...

Global site tag (gtag.js) - Google Analytics