文章目录
- 1.mkString
- 2.size,length,isEmpty,contains
- [3.reverse ,length,distinct](#3.reverse ,length,distinct)
- 4.获取数据相关
-
- 4.1数据准备
- 4.2准确获取尾部last
- [4.3 除了最后一个元素不要其他都要](#4.3 除了最后一个元素不要其他都要)
- 4.4从集合获取部分数据
- 5.删除数据
- 6.切分数据splitAt(n:Int)
- 7.滑动窗口
- 8.多数据集的相关操作:交并补差
- 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无序
![](https://file.jishuzhan.net/article/1789218392423534593/01de63ca63e60d77c3f1bdbcac1b51c5.webp)
2.size,length,isEmpty,contains
println(map.size)
println(map.isEmpty)
println(map.contains("c"))
![](https://file.jishuzhan.net/article/1789218392423534593/dcd4757b2168bf5ea3fd36226651e149.webp)
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)
![](https://file.jishuzhan.net/article/1789218392423534593/03ea31b2c3e37fdb03d204b13283b9fd.webp)
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))
![](https://file.jishuzhan.net/article/1789218392423534593/7e18d57f690cad857534053d582e9742.webp)
小结:都支持head、tail方法,上述展示head方法;
通用集合都可通过索引访问包括map(idx);
元组和map的kv键值对对象通过 _idx方法访问;
println(tuple._1)
Scala的tail方法,tail表示除了头以外的所有元素
![](https://file.jishuzhan.net/article/1789218392423534593/f2406450864858602892d4480fd02307.webp)
甚至可以迭代
println(list_las.tail.tail)
4.2准确获取尾部last
![](https://file.jishuzhan.net/article/1789218392423534593/949033772cb076597ce8969257734870.webp)
4.3 除了最后一个元素不要其他都要
类比tail
![](https://file.jishuzhan.net/article/1789218392423534593/0e246873376504b937a15ed82598e8e0.webp)
同理,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))
![](https://file.jishuzhan.net/article/1789218392423534593/b0582b5126239b8122154309feb94595.webp)
从右边取takeright
println(map_las.takeRight(3))
println(arrayBuffer_las.takeRight(3))
println(set_las.takeRight(3))
println(list_las.takeRight(3))
![](https://file.jishuzhan.net/article/1789218392423534593/5a7cc04f4854e49ca8c8eeb7449660be.webp)
5.删除数据
5.1删除3个从左边
![](https://file.jishuzhan.net/article/1789218392423534593/667e08a65ebea111a73ecc262b17ae43.webp)
5.2删除3个右边
![](https://file.jishuzhan.net/article/1789218392423534593/1378ba44fc7c5294aa467ec26a4366a0.webp)
我的数据顺序都是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))
![](https://file.jishuzhan.net/article/1789218392423534593/539aff0720641d615b8c91e000c60ef9.webp)
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)) }
![](https://file.jishuzhan.net/article/1789218392423534593/655199a9e60a16cd031f879ae9f7c375.webp)
滑动窗口最终获取的还是原始类型数据
滑动一次跳过两个元素使用step关键字默认情况下step=1
val iterator1 = arrayBuffer_las.sliding(2,2)
while (iterator1.hasNext){
println(iterator1.next())
}
![](https://file.jishuzhan.net/article/1789218392423534593/886ca6a13e4b436afcde2edf2192b716.webp)
8.多数据集的相关操作:交并补差
![](https://file.jishuzhan.net/article/1789218392423534593/b1812e8c12ff81ffc7ce19288f9d13ff.webp)
8.1交集
API intersect
运算不改变原始集合
![](https://file.jishuzhan.net/article/1789218392423534593/e835d23ac7ace8735113c4b8f5b7cb28.webp)
英文单词intersect 就是交叉的意思
8.2并集
API union
![](https://file.jishuzhan.net/article/1789218392423534593/e11f05f5a59600bbf59b694f6be0f710.webp)
8.3差集
API diff
两个集合中不同的元素就是差集different
![](https://file.jishuzhan.net/article/1789218392423534593/4c45d252be7eb10748e26767c0baca63.webp)
9.拉链
将两个数据集拉在一起
//基本原则:将两个数据集中相同的位置的数据拉在一起
// (1, 0, 2, 4)
// (2, 0, 4, 8)
// 1,2拉一起 0,0拉一起 2,4拉一起 4,8拉一起
// API zip //返回值是一个元组,甚至可以直接转map
![](https://file.jishuzhan.net/article/1789218392423534593/68672e8df418030a305efd38df202123.webp)
拉链解决了通用集合如何向Map转化的难题;
但是此处拉链转化Map是immutable类型需要一步转化
![](https://file.jishuzhan.net/article/1789218392423534593/7f0445430c2e6f909d7cce578adc50e0.webp)