zoukankan      html  css  js  c++  java
  • 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中,Array和List很重要的区别是:Array是可变对象,虽然其长度不可变,但是它的每个元素都可以更换,而其对象仍然是一个对象;List是不可变对象,创建后你对它进行任何更系操作,返回的都是一个新的List,就像java中的String对象一样。所以,List是设计给函数式编程使用的。

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

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

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

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

  • 相关阅读:
    【洛谷P1119】灾后重建
    【洛谷P1462】通往奥格瑞玛的道路
    【洛谷P1991】无线通讯网
    poj 2892(二分+树状数组)
    hdu 1541(树状数组)
    hdu 5059(模拟)
    hdu 5056(尺取法思路题)
    poj 2100(尺取法)
    hdu 2739(尺取法)
    poj 3320(尺取法)
  • 原文地址:https://www.cnblogs.com/zhanggl/p/4675538.html
Copyright © 2011-2022 走看看