水善利万物而不争,处众人之所恶,故几于道
下面这些方法在集合里面基本是通用的,这里以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)
println(list.head)
println(list.tail)
集合里面除了头,其他的都是尾
println(list.last)
println(list.init)
println(list.reverse)
println(list.take(3)) // 取集合前3个元素
println(list.takeRight(5)) // 取集合后5个元素
println(list.drop(2)) // 删除集合前2个元素
println(list.dropRight(3)) // 删除集合后3个元素
val newList: List[Int] = list.union(list2)
println(newList)
这里的并集只是简单的将两个集合并在一起,不会像数学中那样去重。
如果两个Set集合求并集,就会去重。这个并集和集合本身的性质也有关
val newList = list.intersect(list2)
println(newList)
val newList: List[Int] = list.diff(list2)
val newList: List[Int] = list2.diff(list)
println(newList)
这两次差出来的集合结果不一样,因为操作数不同,list1.diff(list2)
会在list1里面去掉list2里面的元素
val newList: List[(Int, Int)] = list.zip(list2)
如果两个集合的元素个数不一样,那么同等数量的数据会进行拉链,多余的数据不会拉链,也不会报错
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)