文章目录
- 1.mkString
- 2.size,length,isEmpty,contains
- 3.reverse ,length,distinct
- 4.获取数据相关
- 4.1数据准备
- 4.2准确获取尾部last
- 4.3 除了最后一个元素不要其他都要
- 4.4从集合获取部分数据
- 5.删除数据
- 5.1删除3个从左边
- 5.2删除3个右边
- 6.切分数据splitAt(n:Int)
- 7.滑动窗口
- 8.多数据集的相关操作:交并补差
- 8.1交集
- 8.2并集
- 8.3差集
- 9.拉链
1.mkString
import scala.collection.mutable
val map = mutable.Map(
("a", 1),
("b", 2),
("c", 3)
)
println(map.mkString) //b -> 2a -> 1c -> 3 原因是map无序
2.size,length,isEmpty,contains
println(map.size)
println(map.isEmpty)
println(map.contains("c"))
map只有size没有length
集合的方法没有()
3.reverse ,length,distinct
// 3.reverse ,length 反转集合,仅适用于有序的序列集合
import scala.collection.mutable.ArrayBuffer
val arr = ArrayBuffer(2, 0, 4, 8)
println(arr.reverse)
println(arr.length)
distinct底层还是使用HashSet
4.获取数据相关
4.1数据准备
val map_las = mutable.Map(
("a", 1),
("b", 2),
("c", 3)
)
val tuple = (2, 0, 4, 8)
val set_las = mutable.Set(2, 0, 4, 8)
val arrayBuffer_las = ArrayBuffer(2, 0, 4, 8)
val list_las = mutable.Seq(2, 0, 4, 8)
// 获取第一个元素
// tuple获取第一个元素类比map中的第一个元素
println(tuple._1)
println(map_las.head._1)
println(arrayBuffer_las(0))
println(arrayBuffer_las.head)
println(list_las.head)
println(list_las(0))
小结:都支持head、tail方法,上述展示head方法;
通用集合都可通过索引访问包括map(idx);
元组和map的kv键值对对象通过 _idx方法访问;
println(tuple._1)
Scala的tail方法,tail表示除了头以外的所有元素
甚至可以迭代
println(list_las.tail.tail)
4.2准确获取尾部last
4.3 除了最后一个元素不要其他都要
类比tail
同理,init也可以迭代操作
list_las.inits.inits //逐步的往前获取元素
作者认为元素是一个一个添加的,所以真个集合来说,当最后一个元素进行添加操作,前面所有的元素相对于最终的集合为初始(init)集合; //此处这样理解
学习语言时候,跟着作者思路思考是一种非常有效的学习方法;
scala作者设计的方法有些是根据单词意思设计,有些是根据逻辑设计
4.4从集合获取部分数据
// 4.4从集合获取部分数据
println(map_las.take(3))
println(arrayBuffer_las.take(3))
println(set_las.take(3))
println(list_las.take(3))
从右边取takeright
println(map_las.takeRight(3))
println(arrayBuffer_las.takeRight(3))
println(set_las.takeRight(3))
println(list_las.takeRight(3))
5.删除数据
5.1删除3个从左边
5.2删除3个右边
我的数据顺序都是2048添加,除了map
set集合由于无序,首元素是0所以最终删除后输出Set(0)
6.切分数据splitAt(n:Int)
将集合切分成2份,第一份拿到n个元素splitAt(n) 最终以元组形式存在
println(set_las.splitAt(1))
println(set_las.splitAt(2)._1)
println(map_las.splitAt(2))
println(arrayBuffer_las.splitAt(2))
println(list_las.splitAt(2))
7.滑动窗口
- API sliding(windows_size:Int) //返回值是一个迭代器
- sliding(windows_size : Int , step : Int)
- –使用场景:获取每连续的 2 条数据
- 2 0 4 8
- (2,0) (0,4) (4,8) 滑动获取数据
- 滑动窗口最终获取的还是原始类型数据
// 做一个滑动窗口,依次拿两条数据
val stringToInts = map_las.sliding(2)
while (stringToInts.hasNext){
println(stringToInts.next())
}
println("=================")
val iterator = arrayBuffer_las.sliding(2)
while (iterator.hasNext){
println(iterator.next()(0))
}
滑动窗口最终获取的还是原始类型数据
滑动一次跳过两个元素使用step关键字默认情况下step=1
val iterator1 = arrayBuffer_las.sliding(2,2)
while (iterator1.hasNext){
println(iterator1.next())
}
8.多数据集的相关操作:交并补差
8.1交集
API intersect
运算不改变原始集合
英文单词intersect 就是交叉的意思
8.2并集
API union
8.3差集
API diff
两个集合中不同的元素就是差集different
9.拉链
将两个数据集拉在一起
//基本原则:将两个数据集中相同的位置的数据拉在一起
// (1, 0, 2, 4)
// (2, 0, 4, 8)
// 1,2拉一起 0,0拉一起 2,4拉一起 4,8拉一起
// API zip //返回值是一个元组,甚至可以直接转map
拉链解决了通用集合如何向Map转化的难题;
但是此处拉链转化Map是immutable类型需要一步转化