Scala—Slice(提取子序列)方法详解

Scala---Slice(提取子序列)方法详解

在 Scala 中,slice 方法用于从集合中提取一个连续的子序列(切片)。可以应用于多种集合类型,如 ListArraySeq 等。

一、slice 方法的定义

slice 根据提供的起始索引和结束索引返回一个包含该范围内元素的新集合。

scala 复制代码
def slice(from: Int, until: Int): Repr
  • from :切片的起始索引,包含该索引的元素。
  • until :切片的结束索引,不包含该索引的元素。

Tips🤣🤣🤣:

  • slice 会从集合中截取从索引 fromuntil 之间的元素(不包括 until)。
  • 如果 from 超出集合的边界,它会被限制为集合的最小有效索引(通常是 0) ,而如果 until 超出集合的边界,它会被限制为集合的最大有效索引。
  • slice 方法返回的是原集合的一个新的集合,而不是原集合本身的引用。slice 返回的集合是原集合的一个副本,因此原集合本身不会被修改。)

二、Demo🤣🤣🤣

Demo:从数组中截取子数组
scala 复制代码
val arr = Array(1, 2, 3, 4, 5)

// 从索引 1 开始,到索引 4 结束(不包括索引 4)
val sliced = arr.slice(1, 4)
println(sliced.mkString(", ")) // 输出:2, 3, 4

Demo:从列表中截取子列表
scala 复制代码
val list = List("a", "b", "c", "d", "e")

// 从索引 2 开始,到索引 5 结束(不包括索引 5)
val sliced = list.slice(2, 5)
println(sliced) // 输出:List(c, d, e)

Demo:索引超出范围

slice 方法会自动截断,不会抛出异常。

scala 复制代码
val arr = Array(1, 2, 3)

// 起始索引超出范围,返回空数组
println(arr.slice(5, 10).mkString(", ")) // 输出:空

// 结束索引超出范围,截取到数组末尾
println(arr.slice(1, 10).mkString(", ")) // 输出:2, 3

Demo:from >= until 的情况

当起始索引大于或等于结束索引时,返回空集合。

scala 复制代码
val arr = Array(1, 2, 3)
println(arr.slice(2, 2).mkString(", ")) // 输出:空
println(arr.slice(3, 1).mkString(", ")) // 输出:空

Demo模拟滑动窗口
scala 复制代码
val arr = Array(1, 2, 3, 4, 5)
val k = 3

// 遍历数组,提取每个长度为 k 的窗口
for (i <- 0 to arr.length - k) {
  val window = arr.slice(i, i + k)
  println(window.mkString(", "))
}
// 输出:
// 1, 2, 3
// 2, 3, 4
// 3, 4, 5
Demo:提取子字符串

slice 也适用于字符串,可以截取部分内容。

scala 复制代码
val str = "Hello, Scala!"
val sliced = str.slice(7, 12)
println(sliced) // 输出:Scala
Demo:子数组求和

截取数组的一部分并计算其和。

scala 复制代码
val arr = Array(1, 2, 3, 4, 5)
val subSum = arr.slice(1, 4).sum // 索引 1 到 3 的和
println(subSum) // 输出:9

Demo:slicetake 的区别
  • slice 可以指定起始和结束范围。
  • take(n) 只从头部截取指定数量的元素。
scala 复制代码
val arr = Array(1, 2, 3, 4, 5)
println(arr.slice(1, 4).mkString(", ")) // 输出:2, 3, 4
println(arr.take(3).mkString(", "))    // 输出:1, 2, 3

整理不易,列位一键三连 多谢啦!🤣🤣🤣

相关推荐
AC赳赳老秦20 分钟前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
提笔了无痕22 分钟前
如何用Go实现整套RAG流程
开发语言·后端·golang
(Charon)24 分钟前
【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】
java·开发语言
成都第一深情IZZO37 分钟前
事务未提交就发送 MQ,导致消费者读不到订单数据的问题
后端
大橙子打游戏1 小时前
Fable5不能用了,但是依然能让 AI 纯靠截图玩通宝可梦
后端
Jason_chen1 小时前
Linux 3.0 总线机制与故障排查详解
后端
2601_961875241 小时前
法考考试时间安排及科目|时间表|资料已整理
开发语言·c#·inverted-index·suffix-tree·sstable·r-tree·lsm-tree
成都第一深情IZZO1 小时前
Spring Boot 动态数据源在事务中切库失效问题排查
后端
_遥远的救世主_1 小时前
稳定性工程:SLO 量化、降级收敛与故障兜底体系
后端
AI科技星1 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi