Scala入门第二篇-数据结构

这一节主要介绍Scala中的数据结构:

  • Seq
  • Set
  • Map

集合特质

scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安全的访问
两个主要的包

  • 不可变集合:scala.collection.immutable
  • 可变集合 :scala.collection,mutable

scala优先采用不可变集合,集合主要分为三大类:序列(seq)集(set)映射(map)

  • seq 是一个有先后次序的值得序列,IndexedSeq能够通过整形下标快速得访问元素
  • Set是一个没有先后次序得值集合,在SortedSort中,元素以某种形式排过序的顺序被访问。
  • Map是一组键值对偶,Sorted按照键的排序访问其中的实体

每个Scala集合特质或者类都带有一个Apply方法的伴生对象(类似于静态方法),这个apply方法可以用来构建该集合中的实体,这是统一创建原则.
在这里插入图片描述

Seq

数组Array

下面的命令在命令行进入scala测试:

// 定长数组
val nums = new Array[Int](10)

val s = Array("Hello", "World")
s(0) = "Goodbye"
s


// 变长 数组缓冲
import scala.collection.mutable.ArrayBuffer

val b = ArrayBuffer[Int]()
val b2 = new ArrayBuffer[Int] // If you use new, the () is optional

b += 1
b += (1, 2, 3, 5)
b ++= Array(8, 13, 21)

// 删除最后5个元素
b.trimEnd(5)
b

// 在第三个位置插入6
b.insert(2, 6)
b

// 在第三个位置插入 7、8、9
b.insert(2, 7, 8, 9)
b

// 删除第三个元素
b.remove(2)
b

// 删除从第三个位置开始的3个元素
b.remove(2, 3)
b

// 变长数组与不变数组之间的转换
val a1 = b.toArray
a1.toBuffer

// 数组遍历
val a = Array(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)

//  下标访问
for (i <- 0 until a.length)
  println(i + ": " + a(i))

// 产生一个Range
0 until a.length

// 产生一个Range,以2为间隔
0 until (a.length, 2)

// Range倒转
(0 until a.length).reverse

// a 遍历
for (elem <- a)
  println(elem)

// a 索引
for (i <- a.indices)
  println(i + ": " + a(i))
多维数组
// 多维数组 3行4列
val matrix = Array.ofDim[Double](3, 4) // An array of arrays

val row = 0
val column = 2

matrix(0)(2) = 17.29

matrix.length 
matrix(row) // An array
matrix(row).length 

val triangle = new Array[Array[Int]](10)

for (i <- triangle.indices) 
  triangle(i) = new Array[Int](i + 1)

triangle(0)(0) = 1

for (i <- 1 until triangle.length) {
  triangle(i)(0) = 1
  triangle(i)(i) = 1
  for (j <- 1 until triangle(i).length - 1) 
    triangle(i)(j) = triangle(i - 1)(j - 1) + triangle(i - 1)(j)
}

for (row <- triangle) {
  for (elem <- row) print(el
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值