26_Scala集合常用API汇总

文章目录

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类型需要一步转化

相关推荐
charlie1145141914 分钟前
C++ STL CookBook
开发语言·c++·stl·c++20
袁袁袁袁满4 分钟前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程
ELI_He99910 分钟前
PHP中替换某个包或某个类
开发语言·php
m0_7482361118 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
颜淡慕潇23 分钟前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
倔强的石头10626 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
Watermelo61730 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Evand J3 小时前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
LucianaiB3 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python