Coursera Scala 4-7:Lists

Coursera Scala 4-7:Lists

Lists

val nums = List(1,3,4)
val empty = List()
val fruit = List("apples","oranges")
val diag3 = List(List(1,0,0),List(0,1,0),List(0,0,1))
  • immutable
  • List是递归的,arrays则不是

The List Type

和arrays一样,lists的元素必须是相同类型的。

Constructors of Lists

所有的Lists由:

  • 空的list Nil
  • 构造操作::,举个例子x :: xs会创建新的list,第一个元素为x,第二个元素为xs

Right Associativity

::是右结合性

"1"::("2"::("3"::Nil))            //> res1: List[String] = List(1, 2, 3)

scala中做了简化 所以 也可以写成

"1"::"2"::"3"::Nil

是等价的 ,::其实是方法名 相当于调用方法 可以写成.::

Nil.::(4).::(3).::(2).::(1)

Operations on Lists

  • head 取第一个元素
  • tail 返回不包含第一个元素的list
  • isEmpty

更多用于List的函数:

  • xs.length
  • xs.last 获得最后一个
  • xs.init 得到一个除了最后一个元素的列表
  • xs take n
  • xs drop n
  • xs(n)

Console代码

scala> def xs= List(0,1,2,3,4)
xs: List[Int]  

scala> xs.length
res0: Int = 5  

scala> xs.last
res1: Int = 4  

scala> xs.init
res2: List[Int] = List(0, 1, 2, 3)  

scala> xs take 1
res3: List[Int] = List(0)  

scala> xs drop 1
res4: List[Int] = List(1, 2, 3, 4)  

scala> xs(0)
res5: Int = 0

创建新列表:
xs ++ ys 合并
xs.reverse 倒序
xs.updated(n,x)

查找元素:
xs indexOf x 不存在返回-1
xs contains x

List Patterns

Nil 表示空list
p :: ps 表示以p开头的元素 这个模式和[Head|Tail]一致
List(p1,...,p2) 也可以写成 p1::....::pn::Nil
当然也可以用_
例子:

   List(1,2,3) match {
      case List(1,_,3) => "yes"  //这样其实也是一种构造模式吧
   }                                              //> res2: String = yes
时间: 2024-10-02 12:25:12

Coursera Scala 4-7:Lists的相关文章

Coursera Scala 5-5 List:Reduction of Lists

Coursera Scala 5-5 List:Reduction of Lists 另一个list常用的操作是:连结集合元素.例如sum(list) ReduceLeft 使用ReduceLeft可以很方便的编写通用的连结方法 def sum(xs: List[Int]) = (0 :: xs) reduceLeft ((x,y) => x+y) def product(xs : List[Int]) = (1 :: xs) reduceLeft((x,y) => x*y) FoldLeft

Coursera Scala 2-5,6:类

Coursera Scala 2-5,6:类 class Rational(n: Int, d: Int) { require(d != 0) private val g = gcd(n.abs, d.abs) //将构造器传入的参数,赋值成成员变量,外部才可以访问 val numer = n / g val denom = d / g def this(n: Int) = this(n, 1) def +(that: Rational): Rational = new Rational( nu

Coursera Scala 5-4:List的高阶函数

Coursera Scala 5-4:List的高阶函数 Recurring Patterns for Computations on Lists 重复出现的Lists计算模式 lists的很多函数有相似的结构,重复出现的模式有: 用某个方法转换每个元素 用某个条件提取元素 用某种方法链接元素 函数式编程语言,让程序员能写出更通用的计算模式,通过使用高阶函数. Applying a Function to Elements of a List 将一个list的所有元素,进行转换.例子:返回一个新

Coursera Scala 5-2:Pairs和Tuple

Coursera Scala 5-2:Pairs和Tuple pair: (x,y) scala> val (label,value) = (1,"s") label: Int = 1 value: String = s scala> (1,"s") res0: (Int, String) = (1,s) 超过两个元素的就是tuple了 (T1,....,Tn)是Scala.Tuplen[T1,...,Tn]的缩写 (e1,....,en)是Scala.

Coursera Scala 4-1:函数作为对象

Coursera Scala 4-1:函数作为对象 Functions Types Relate to Classes Scala是纯粹的面向对象的语言,函数是拥有apply方法的对象. 函数类型A=>B等价于: package scala trait Function1[A,B]{ def apply(x:A):B } Functions Values Ralate to Objects 匿名函数 (x:Int) => x*x 等价于: { class AnonFun extends Fun

Coursera Scala 5-3:Implicit

Coursera Scala 5-3:Implicit 归并排序 上一节课的排序函数不够通用,类型只适用Int: object mergesort{ def msort(xs: List[Int]):List[Int] = { val n = xs.length/2 if(n==0) xs else{ def merge(xs:List[Int],ys: List[Int]):List[Int] = (xs,ys)match { case (Nil,ys) => ys case (xs,Nil)

Coursera Scala 4-6:模型匹配

Coursera Scala 4-6:模型匹配 匹配值 val times = 1 times match { case 1 => "one" case 2 => "two" case _ => "some other number" } List(('a',1), ('b',2), ('a',1)) match { case Nil => println("null") case (C, n) ::

Coursera Scala 4-3:子类型和泛型

Coursera Scala 4-3:子类型和泛型 Type Bounds def assertAllPos[S <: IntSet](r: S): S = ... S <: T 表示S是T的子类 S >: T表示S是T的父类 也可以这么用: [S >: NonEmpty <: IntSet] 协变covariant 这个的意思是: 如果List是convariant的,S<:T (S是T的子类)成立,那么List[S]<:List[T]也成立 covariant

Coursera Scala 2-1:高阶函数

把函数当做参数,传递给函数(好绕-..-),称为高阶函数. 高阶函数使我们的代码保持DRY(Dont't Repeat Yourself) 举个例子 一个返回所有扩展名为".scala"的文件的方法: def filesHere = (new java.io.File(".")).listFiles def filesEnding(query: String) = for (file <- filesHere; if file.getName.endsWith