Programming in Scala (Second Edition) 读书笔记15 使用List

  1. List is immutable, 底层实现用的数据结构上linked list. head 是第一个元素,tail是其余元素

last是最后一个元素, init是除最后一个元素之外的元素

2. 插入排序算法

package chapter16

object TestList extends App{
  def isort(x: List[Int]): List[Int] = 
    if (x.isEmpty) x
    else insert(x.head, isort(x.tail))
    
  def insert(x: Int, xs: List[Int]): List[Int] = {
     if (xs.isEmpty || x <= xs.head) x :: xs
     else xs.head :: insert(x, xs.tail)
  }
  
  val list0 = List(4,5,3,6,1,7,0)
  println(isort(list0))
}

3. 使用pattern matching改进代码

package chapter16

object TestList extends App{
  def isort(xs: List[Int]): List[Int] = xs match {
    case List() => xs
    case x::xs1 => insert(x, isort(xs1))
  }
    
  def insert(x: Int, xs: List[Int]): List[Int] = xs match {
    case List() => x::xs
    case y::ys =>  if (x <= y) x :: xs else y::insert(x, ys)
   
  }
  
  val list0 = List(4,5,3,6,1,7,0)
  println(isort(list0))
}

4. 一阶方法

This section explains most first-order methods defined in the List class. A method is first-order if it does not take any functions as arguments.
不以函数为参数的方法称为一阶方法

5. 拼接实现reverse方法

  def reverse(xs: List[Int]): List[Int] = xs match {
    case List() => xs
    case y::ys => reverse(ys):::List(y)
  }
  val list0 = List(4,5,3,6,1,7,0)
  println(reverse(list0))  //List(0, 7, 1, 6, 3, 5, 4)

6.扁平化List

The flatten method takes a list of lists and flattens it out to a single list

7.drop 去掉前 n个, take 取前 n个

8.map 相当于R语言中的lapply

9.flatmap 如果 f返回的是list,则把所有的返回值拼接在一起返回

时间: 2024-10-25 18:43:24

Programming in Scala (Second Edition) 读书笔记15 使用List的相关文章

Programming in Scala (Second Edition) 读书笔记15 case class and pattern matching

一个算术表达式包含: 数字,变量,二元操作符,一元操作符.用下面几个类来模拟它们 package chapter15 abstract class Expr case class Var(name: String) extends Expr case class Number(num: Double) extends Expr case class UnOp(operator: String, arg: Expr) extends Expr case class BinOp(operator: 

Programming in Scala (Second Edition) 读书笔记10

你肯定见过在控制台用字符打印图形的程序,这一章就从定义一个图形元素开始.我们的图形元素都是一些字符组成的矩形 abstract class Element {   def contents: Array[String]   def height: Int = contents.length   def width: Int = if (height == 0) 0 else contents(0).length } 上面定义的三个方法都没有参数,连小括号也省去了.这样的方法叫做:无参方法(par

Programming in Scala (Second Edition) 读书笔记21 隐式转化

1. There's a fundamental difference between your own code and libraries of other people: you can change or extend your own code as you wish, but if you want to use someone else's libraries, you usually have to take them as they are. 你可以改变或扩展自己的代码,但是对

Programming in Scala (Second Edition) 读书笔记7 内置控制结构

1. One thing you will notice is that almost all of Scala's control structures result in some value Scala的每种控制语句都是有值的 This is the approach taken by functional languages, in which programs are viewed as computing a value, thus the components of a progr

Programming in Scala (Second Edition) 读书笔记13 packages and import

目前,在一个包中你看到的top level的对象只有:class, trait, object.其实任何对象都可以是top level的.也就是说,没有必要把函数,value, variable等限制在class, trait, object中.它们可以在整个包范围内都是全局性的. 方法很简单,把这些东东放到package object中就行了.pakcage object的名字和包名相同 包含package object的文件放在该packag下,名字就叫package.scala chapt

Programming in Scala (Second Edition) 读书笔记12 Trais

1.什么是Trait ? Traits are a fundamental unit of code reuse in Scala. A trait encapsulatesmethod and field definitions, which can then be reused by mixing them intoclasses. Unlike class inheritance, in which each class must inherit from justone supercla

Programming in Scala (Second Edition) 读书笔记6 函数和闭包

When programs get larger, you need some way to divide them into smaller, more manageable pieces. For dividing up control flow, Scala offers an approach familiar to all experienced programmers: divide the code into functions. In fact, Scala offers sev

Programming in Scala (Second Edition) 读书笔记26 Extractors

1. By now you have probably grown accustomed to the concise way data can be decomposed and analyzed using pattern matching. This chapter shows you how to generalize this concept further. Until now, constructor patterns were linked to case classes. Fo

Programming in Scala (Second Edition) 读书笔记3

创建并初始化一个String Array     val strArr1 = new Array[String](3)     strArr1(0) = "How"     strArr1(1) = "are"     strArr1(2) = "you!" 上述代码被transform 为     val strArr1 = new Array[String](3)     strArr1.update(0, "How")