Scala 系列 - 数据结构

本文主要对scala语言的数据结构进行介绍

数组 Array

  • 元素具有相同类型
// []中给出数组类型 ()中给出数组元素个数
val ARR = new Array[Int](3)
// 下标从0开始
ARR(0) = 10
// 自动推断类型
val Arr = Array(1,2,3)
// 高维数组 3行4列
val Matrix = Array.ofDim[Int](3,4)
// 索引
Matrix(0)(1)
// or
val Matrix = Array(Array(1,2), Array(3,4))

元组 tuple

  • 元组可以具有不同的类型
  • 元组是不可变的
val t = ("Big", 2015, 45.0)
// 索引 访问元组元素 索引是基于1的 不是基于0的
t._1
// 返回 "Big"

列表 List

  • List 是不可变的同类对象序列
  • Nil 是空列表的简写,等价于 List()
var L = List("a", "b", "c", "d")

L.head
// 返回 元素"a"
L.tail
// 返回列表 List("b", "c", "d")
L.reverse
// 反转列表 返回 List(3, 2, 1)
L.mkString("^ ")
// 返回用列表元素组成的字符串 "3^ 2^ 1"
L.isEmpty
// 判断列表是否为空
L.length
// 返回列表 L 的元素数量
L.drop(2)
// 返回去掉前两个元素的列表
L.dropRight(2)
// 返回去掉后两个元素的列表
// 把新元素组合到列表的最前端
var L2 = "e"::L
// 得到 List("e", "a", "b", "c", "d")

var L3 = L :+ "e"
// 得到 List("a", "b", "c", "d", "e")

// 所以列表也可以使用如下方法创建
var L = "e" :: "a" :: "b" :: "c" :: "d" :: Nil
val L1 = List(1, 2)
val L2 = List(3, 4)
// 实现列表的叠加 相当于python里面的 L1 + L2
L1 ::: L2
// 得到List(1,2,3,4)

Vector

val vecl = Vector(1,2)
// 得到 Vector(3,4,1,2)
val vec2 = 3 +: 4 +: vec1
// 得到 Vector(3,4,1,2,5)
val vec3 = vec2 :+ 5

Range

// 包含5
// 等价于 1 until 5 ( 不包含5 )
val r = new Range(1,5,1)
// 包含5
1 to 5

集合 set

// 创建不可变集合
var S1 = Set('a', 'b')
// 创建可变集合
import scala.collection.mutable.Set
var S2 = Set('a', 'b')
// 可变集合与不可变集合的操作
// 相当于把 S1 加上 'c' 然后把得到的结果再赋值给 S1 所以 S1 必须声明为不可变集合
S1 += 'c'
// 相当于原位相加
S2 += 'c'
// 添加/删除多个元素
S2 ++= List('d', 'e', 'f')
S2 --= List('d', 'f')
// 删除所有元素
S2.clear

映射 map

  • 键值对
// 不可变映射
// 不能修改某个key的value 不能添加键值对
val uni = Map("NJU" -> "nanjing uni", "NYU" -> "NewYork uni")
// 是否存在NJU这个键
uni.contains("NJU")
// 获取NJU对应的value
uni("NJU")

// 可变映射
import scala.collection.mutable.Map
val uni = Map("NJU" -> "nanjing uni")

// 为映射增加元素
// 原位增加
uni + "NYU" -> "NewYork uni"
// 获取键枚举器/值枚举器
uni.keys
uni.values

参考资料:
《厦门大学-Spark编程基础(MOOC)》
《Functional Programming Principles in Scala(Coursera)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值