网站数据流程,西安中风险地区,适合设计师的网站,徐州网站建设模板Scala—Slice#xff08;提取子序列#xff09;方法详解
在 Scala 中#xff0c;slice 方法用于从集合中提取一个连续的子序列#xff08;切片#xff09;。可以应用于多种集合类型#xff0c;如 List、Array、Seq 等。 一、slice 方法的定义
slice 根据提供的起始索引…Scala—Slice提取子序列方法详解
在 Scala 中slice 方法用于从集合中提取一个连续的子序列切片。可以应用于多种集合类型如 List、Array、Seq 等。 一、slice 方法的定义
slice 根据提供的起始索引和结束索引返回一个包含该范围内元素的新集合。
def slice(from: Int, until: Int): Reprfrom切片的起始索引包含该索引的元素。until切片的结束索引不包含该索引的元素。
Tips
slice 会从集合中截取从索引 from 到 until 之间的元素不包括 until。如果 from 超出集合的边界它会被限制为集合的最小有效索引通常是 0而如果 until 超出集合的边界它会被限制为集合的最大有效索引。slice 方法返回的是原集合的一个新的集合而不是原集合本身的引用。slice 返回的集合是原集合的一个副本因此原集合本身不会被修改。 二、Demo
Demo从数组中截取子数组
val arr Array(1, 2, 3, 4, 5)// 从索引 1 开始到索引 4 结束不包括索引 4
val sliced arr.slice(1, 4)
println(sliced.mkString(, )) // 输出2, 3, 4Demo从列表中截取子列表
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 方法会自动截断不会抛出异常。
val arr Array(1, 2, 3)// 起始索引超出范围返回空数组
println(arr.slice(5, 10).mkString(, )) // 输出空// 结束索引超出范围截取到数组末尾
println(arr.slice(1, 10).mkString(, )) // 输出2, 3Demofrom until 的情况
当起始索引大于或等于结束索引时返回空集合。
val arr Array(1, 2, 3)
println(arr.slice(2, 2).mkString(, )) // 输出空
println(arr.slice(3, 1).mkString(, )) // 输出空Demo模拟滑动窗口
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, 5Demo提取子字符串
slice 也适用于字符串可以截取部分内容。
val str Hello, Scala!
val sliced str.slice(7, 12)
println(sliced) // 输出ScalaDemo子数组求和
截取数组的一部分并计算其和。
val arr Array(1, 2, 3, 4, 5)
val subSum arr.slice(1, 4).sum // 索引 1 到 3 的和
println(subSum) // 输出9Demoslice与 take 的区别
slice 可以指定起始和结束范围。take(n) 只从头部截取指定数量的元素。
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整理不易列位一键三连 多谢啦