Scala集合常用函数 - 衍生集合

水善利万物而不争,处众人之所恶,故几于道

目录

  1. 获取集合的头
  2. 获取集合的尾(不是头的就是尾)
  3. 获取集合最后一个数据
  4. 集合初始数据(不包含最后一个)
  5. 集合反转
  6. 取集合前(后)n个元素
  7. 删除集合前(后)n个元素
  8. 并集
  9. 交集
  10. 差集
  11. 拉链
  12. 滑窗

下面这些方法在集合里面基本是通用的,这里以List为例

val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
val list2: List[Int] = List(4, 5, 6, 7, 8, 9, 10)

1. 获取集合的头

println(list.head)

2. 获取集合的尾(不是头的就是尾)

println(list.tail)

集合里面除了头,其他的都是尾

3. 获取集合最后一个数据

println(list.last)

4. 集合初始数据(不包含最后一个)

println(list.init)

5. 集合反转

println(list.reverse)

6. 取集合前(后)n个元素

println(list.take(3))   // 取集合前3个元素
println(list.takeRight(5))  // 取集合后5个元素

7. 删除集合前(后)n个元素

println(list.drop(2))   // 删除集合前2个元素
println(list.dropRight(3))  // 删除集合后3个元素

8. 并集

val newList: List[Int] = list.union(list2)
println(newList)

这里的并集只是简单的将两个集合并在一起,不会像数学中那样去重。
如果两个Set集合求并集,就会去重。这个并集和集合本身的性质也有关

9. 交集

val newList = list.intersect(list2)
println(newList)

10. 差集

val newList: List[Int] = list.diff(list2)
val newList: List[Int] = list2.diff(list)
println(newList)

这两次差出来的集合结果不一样,因为操作数不同,list1.diff(list2)会在list1里面去掉list2里面的元素

11. 拉链

val newList: List[(Int, Int)] = list.zip(list2)

如果两个集合的元素个数不一样,那么同等数量的数据会进行拉链,多余的数据不会拉链,也不会报错

12. 滑窗

val iterator: Iterator[List[Int]] = list.sliding(3)
val iterator: Iterator[List[Int]] = list.sliding(2, 3)

返回值是一个迭代器。
一个参数表示窗口的大小,默认步长是1,也就是一次过一个元素
两个参数的话,第一个参数表示窗口大小,第二个参数表示步长,也就是一次步过几个元素

val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7)

for (elem <- list.sliding(2)) {  // 窗口大小为2
  println(elem)
}
结果:
List(1, 2)
List(2, 3)
List(3, 4)
List(4, 5)
List(5, 6)
List(6, 7)

========================================================
for (elem <- list.sliding(3, 2)) { 
  println(elem)
}
结果:
List(1, 2, 3)
List(3, 4, 5)
List(5, 6, 7)

你可能感兴趣的:(Scala,scala,开发语言,后端,Scala集合常用函数,衍生集合)