1 介绍

Scala中列表List类似于数组,List所有元素都具有相同的类型,但有两个重要的区别。

  • 首先,列表是不可变的,这意味着一个列表的元素可以不被分配来改变。
  • 第二,列表表示一个链表,而数组平坦的。

具有T类型的元素的列表的类型被写为List[T]。例如,这里有各种数据类型定义的一些列表:

// List of Strings
val fruit: List[String] = List("apples", "oranges", "pears") // List of Integers
val nums: List[Int] = List(1, 2, 3, 4) // Empty List.
val empty: List[Nothing] = List() // Two dimensional list
val dim: List[List[Int]] =
List(
List(1, 0, 0),
List(0, 1, 0),
List(0, 0, 1)
)

  

List是不可变的,操作List返回的是新的List对象.

val l = List(1,2,3,4,5)

List中元素类型是一致,上面的l类型就是List[Int]

2 创建List

(1) Lisp-style and Java-style

scala> val list = 1 :: 2 :: 3 :: Nil
list: List[Int] = List(1, 2, 3) scala> val list = List(1,2,3)
x: List[Int] = List(1, 2, 3)

(2) range函数。

scala> val x = List.range(1,10)
x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> val x = List.range(0,10,2)
x: List[Int] = List(0, 2, 4, 6, 8)
//或者直接使用 toList
val list3 = 10 to 20 toList
list3: List[Int] = List(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

  

   (3) fill函数

scala> val x = List.fill(3)("foo")
x: List[java.lang.String] = List(foo, foo, foo)

  (4) tabulate

List.tabulate() 方法是通过给定的函数来创建列表。
方法的第一个参数为元素的数量,可以是二维的,第二个参数为指定的函数,我们通过指定的函数计算结果并返回值插入到列表中,起始值为 0,实例如下:

object Test {
def main(args: Array[String]) {
// Creates 5 elements using the given function.
val squares = List.tabulate(6)(n => n * n)
println( "squares : " + squares ) //
val mul = List.tabulate( 4,5 )( _ * _ )
println( "mul : " + mul )
}
}

  输出结果

C:/>scalac Test.scala
C:/>scala Test
squares : List(0, 1, 4, 9, 16, 25)
mul : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4),
List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

3 增加元素

val left = List(1,2,3)
val right = List(4,5,6) //合并两个List
left ++ right // List(1,2,3,4,5,6)
left:::right // List(1,2,3,4,5,6)
right:::left // List(4,5,6,1,2,3)
right.:::(left) // List(1,2,3,4,5,6)
left.:::(right) // List(4,5,6,1,2,3) //在List头部添加元素
0::left //List(0,1,2,3)
left.::(0) //List(0,1,2,3)
0+:left //List(0,1,2,3) //在List尾部添加元素
left :+ 4 //List(1,2,3,4)

  任何以冒号结果的操作符,都是右绑定的,即 0 :: List(1,2,3) = List(1,2,3).::(0) = List(0,1,2,3) 从这里可以看出操作::其实是右边List的操作符,而非左边Int类型的操作符

4 迭代List

scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3) scala> x.foreach { println }
1
2
3 scala> var sum = 0
sum: Int = 0 scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3) scala> x.foreach(sum += _) scala> println(sum)
6 scala> val names = List("Bob", "Fred", "Joe", "Julia", "Kim")
names: List[java.lang.String] = List(Bob, Fred, Joe, Julia, Kim) scala> for (name <- names if name.startsWith("J"))
| println(name)
Joe
Julia scala> val x = List(1,2,3,4,5,6,7,8,9,10)
x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // create a list of all the even numbers in the list
scala> val evens = x.filter(a => a % 2 == 0)
evens: List[Int] = List(2, 4, 6, 8, 10)

  

5 map函数

The Scala List map function "transforms each element of a collection based on a function."

scala> val x = List(1,2,3)
x: List[Int] = List(1, 2, 3) scala> val y = x.map(a => a * 2)
y: List[Int] = List(2, 4, 6)
scala> val y = x.map(_ * 2)
y: List[Int] = List(2, 4, 6)

  更具体的map、flattenMap等见http://www.cnblogs.com/yxzfscg/p/4997182.html

http://my.oschina.net/brucegao/blog/372362

http://www.yiibai.com/scala/scala_lists.html

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.List

http://alvinalexander.com/scala/scala-list-class-examples

http://www.oschina.net/code/snippet_226405_19569

Scala List的更多相关文章

  1. jdb调试scala代码的简单介绍

    在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...

  2. scala练习题1 基础知识

    1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等:     2,在scala REPL中,计算3的平方根,然 ...

  3. 牛顿法求平方根 scala

    你任说1个整数x,我任猜它的平方根为y,如果不对或精度不够准确,那我令y = (y+x/y)/2.如此循环反复下去,y就会无限逼近x的平方根.scala代码牛顿智商太高了println( sqr(10 ...

  4. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  5. Scala化规则引擎

    1. 引言 什么是规则引擎 一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑.业务规则通常应该由业务分析人员和策略管理者开发和修改,但有些复杂的业务规则也可以由技 ...

  6. Scala快速概览

    IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...

  7. Scala Macros - scalamela 1.x,inline-meta annotations

    在上期讨论中我们介绍了Scala Macros,它可以说是工具库编程人员不可或缺的编程手段,可以实现编译器在编译源代码时对源代码进行的修改.扩展和替换,如此可以对用户屏蔽工具库复杂的内部细节,使他们可 ...

  8. Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...

  9. Scala Reflection - Mirrors,ClassTag,TypeTag and WeakTypeTag

    反射reflection是程序对自身的检查.验证甚至代码修改功能.反射可以通过它的Reify功能来实时自动构建生成静态的Scala实例如:类(class).方法(method).表达式(express ...

  10. Scala For Java的一些参考

          变量 String yourPast = "Good Java Programmer"; val yourPast : String = "Good Java ...

随机推荐

  1. POJ 2591 1338 2545 2247(数列递归衍生问题,思路挺妙)

    四道题的难度: 2591<1338<2545<2247 POJ 2591 Set Definition: 这是从discuss里看来的,写的挺好,直接copy,根据我的代码稍有改动( ...

  2. .NET Framework 框架简述01

    NET技术可以以规范和实现两部分来划分.   规范:   公共语言架构(Common Language Infrastructure, CLI),主要包括 1.通用类型系统(Common Type S ...

  3. [你必须知道的.NET]第三十三回,深入.NET 4.0之,Lazy<T>点滴

    发布日期:2009.10.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 对象的创建方式,始终代表了软件工业的生产力方向,代表了先进软件技 ...

  4. web.xml中servlet初始化参数的设置

    <context-param><param-name>param1</param-name><param-value>value1</param- ...

  5. AA投资

    AA投资创建于2015年,总部位于北京,创始人成妙绮和王浩泽,专注于天使轮的技术创新驱动的TMT项目投资. 投资方向 AA投资是一家2015年才成立的风险投资机构,专注于种子轮.天使轮.Pre-A轮的 ...

  6. vmware通过vmnet8共享本地网络

    转载于:http://zhaolongchn.blog.163.com/blog/static/19065850420122595117886/ 1,首先将真实电脑的虚拟网卡VMnet8启用 2,然后 ...

  7. 自己写的中间层..基于通讯组件 RTC

    273265088 我用原生Listbox与你的组件组合...创造了奇迹..搞了一个非常复杂的 UI .. 每个item高度 包括里面的元素 以及事件都是动态的搞了好几个小时感觉UI 非常完美比客户要 ...

  8. HTML5的fieldset标签

    定义和用法 fieldset 元素可将表单内的相关元素分组,绘制一个带标题的框,有如winform开发中的panel. <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的 ...

  9. Android addRule()

    布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到 Relati ...

  10. Oracle ->> 随机函数

    SQL SERVER下生成随机数据干得多,可是到了Oracle下我就傻了.没用过Oracle,不知道该怎么办?SQL SERVER下依靠TABLESAMPLE或者CHECKSUM(NEWID())来做 ...