快速业务通道

面向Java开发人员的Scala指南 - 集合类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
uo;var”。

Scala 的 Array 提供了很多方法,在这里无法一一列出并演示。总的来说,在使用数组时,应该充分地利用 Array 提供的方法,而不是使用传统的 for ... 模式遍历数组并查找或执行需要的操作。最简单的实现方法通常是编写一个函数(如果有必要的话可以使用嵌套,如清单 7 中的 testFilterAndMap 示例所示),这个函数可以执行所需的操作,然后根据期望的结果将该函数传递给 Array 中的 map、filter、foreach 或其他方法之一。

函数性列表

函数编程多年来的一个核心特性就是列表,它和数组在对象领域中享有相同级别的 “内置” 性。列表对于构建函数性软件非常关键,因此,您(作为一名刚起步的 Scala 程序员)必须能够理解列表及其工作原理。即使列表从未形成新的设计,但是 Scala 代码在其库中广泛使用了列表。因此学习列表是非常必要的。

在 Scala 中,列表类似于数组,因为它的核心定义是 Scala 库中的标准类 List[T]。并且,和 Array[T] 相同,List[T] 继承了很多基类和特性,首先使用 Seq[T] 作为直接上层基类。

基本上,列表是一些可以通过列表头或列表尾提取的元素的集合。列表来自于 Lisp,后者是一种主要围绕 “LISt 处理” 的语言,它通过 car 操作获得列表的头部,通过 cdr 操作获得列表尾部(名称渊源与历史有关;第一个可以解释它的人有奖励)。

从很多方面来讲,使用列表要比使用数组简单,原因有二,首先函数语言过去一直为列表处理提供了良好的支持(而 Scala 继承了这些支持),其次可以很好地构成和分解列表。例如,函数通常从列表中挑选内容。为此,它将选取列表的第一个元素 — 列表头部 — 来对该元素执行处理,然后再递归式地将列表的其余部分传递给自身。这样可以极大减少处理代码内部具有相同共享状态的可能性,并且,假如每个步骤只需处理一个元素,极有可能使代码分布到多个线程(如果处理是比较好的)。

构成和分解列表非常简单,如清单 8 所示:

清单 8. 使用列表

class ListTest {   import org.junit._, Assert._   @Test def simpleList =   {    val myFirstList = List("Ted", "Amanda", "Luke")    assertEquals(myFirstList.isEmpty, false)    assertEquals(myFirstList.head, "Ted")    assertEquals(myFirstList.tail, List("Amanda", "Luke")    assertEquals(myFirstList.last, "Luke")   } }

面向Java开发人员的Scala指南 - 集合类型(5)

时间:2011-01-30 IBM Ted Neward

注意,构建列表与构建数组十分相似;都类似于构建一个普通对象,不同之处是这里不需要 “new”(这是 “case 类” 的功能,我们将在未来的文章中介绍到)。请进一步注意 tail 方法调用的结果 — 结果并不是列表的最后一个元素(通过 last 提供),而是除第一个元素以外的其余列表元素。

当然,列表的强大力量部分来自于递归处理列表元素的能力,这表示可以从列表提取头部,直到列表为空,然后累积结果:

清单 9. 递归处理

@Test def recurseList =   {    val myVIPList = List("Ted", "Amanda", "Luke", "Don", "Martin")    def count(VIPs : List[String]) : Int =    {     if (VIPs.isEmpty)      0     else      count(VIPs.tail) + 1    }    assertEquals(count(myVIPList), myVIPList.length)   }

注意,如果不考虑返回类型 count,Scala 编译器或解释器将会出现点麻烦 — 因为这是一个尾递归(tail-recursive)调用,旨在减少在大量

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号