Scala 特质 Traversable | 第三部分
操作如下:
- 子集合检索操作:
这里的操作有 slice,drop,dropWhile,filter,filterNot,tail,take,takeWhile 和 init。这些操作用于返回一些子集合。
示例:“`scala // Scala program of Sub-Collection
// retrieval operation
// Creating object
object SubCollection
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val x = List(17, 19, 21, 29, 31)
// Applying Sub-Collection
// retrieval operation
val y = x.init
// Displays all the elements of
// the List except the last one
println(y)
}
}
</li>
</ul><pre><code class="line-numbers">输出:
“`scala List(17, 19, 21, 29)
在这里, init 检索 Traversable 集合的所有元素,但不包括最后一个元素。
示例:“`scala // Scala program of Sub-Collection
// retrieval operation
// Creating object
object SubCollection
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val x = List(17, 19, 21, 29, 31)
// Applying Sub-Collection
// retrieval operation
val y = x.tail
// Displays all the elements of
// the List except the first one
println(y)
}
}<pre><code class="line-numbers">输出:
“`scala List(19, 21, 29, 31)
在这里, tail 检索 Traversable 集合的所有元素,但不包括第一个元素。
示例:“`scala // Scala program of Sub-Collection
// retrieval operation
// Creating object
object SubCollection
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val x = List(27, 29, 31, 49, 51, 56)
// Applying Sub-Collection
// retrieval operation
val y = x.slice(2, 5)
// Displays the elements
// from index 2 to 4
println(y)
}
}<pre><code class="line-numbers">输出:
“`scala List(31, 49, 51)
在这里, slice 将返回给定索引范围内的元素,不包括最后一个索引。
示例:“`scala // Scala program of Sub-Collection
// retrieval operation
// Creating object
object SubCollection
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val x = List(37, 49, 51, 69, 71, 86)
// Applying Sub-Collection
// retrieval operation
val y = x.take(2)
// Displays the first two
// elements of the list
println(y)
}
}<pre><code class="line-numbers">输出:
“`scala List(37, 49)
在这里,此操作将返回 take 操作中给定的元素个数。
示例:“`scala // Scala program of Sub-Collection
// retrieval operation
// Creating object
object SubCollection
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val x = List(33, 34, 36, 37, 39, 40, 44)
// Applying Sub-Collection
// retrieval operation
val y = x.drop(4)
// Displays all the elements of
// the list except the first
// four elements
println(y)
}
}<pre><code class="line-numbers">输出:
“`scala List(39, 40, 44)
在这里,这个操作将返回除第一个四个元素之外的所有元素。
List(39, 40, 44)
在这里, 这个操作将返回集合中除了参数中给出的前几个元素外的所有元素。
例如:// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(2, 5, 9, 13, 17, 20) // 应用子集合检索操作 val y = x.dropWhile(_ < 10) // 显示大于或等于 10 的列表的所有元素 println(y) } }
输出:
List(13, 17, 20)
在这里, dropWhile 将删除给定条件满足之前的元素并返回其余的左侧元素。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(2, 5, 9, 10, 13, 17, 20) // 应用子集合检索操作 val y = x.takeWhile(_ < 13) // 显示小于 13 的列表的所有元素 println(y) } }
输出:
List(2, 5, 9, 10)
在这里, takeWhile 将取得满足给定条件的元素并返回这些元素。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(9, 65, 99, 10, 23, 17, 12) // 应用子集合检索操作 val y = x.filter(_ < 23) // 显示小于 23 的列表的所有元素 println(y) } }
输出:
List(9, 10, 17, 12)
在这里, filter 将返回满足给定条件的所有元素并丢弃其他元素。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(9, 65, 99, 10, 23, 17, 12) // 应用子集合检索操作 val y = x.filterNot(_ < 23) // 显示大于或等于 23 的列表的所有元素 println(y) } }
输出:
List(65, 99, 23)
在这里, filterNot 将返回不满足给定条件的所有元素并丢弃其他元素。
- 子分区操作:
这些操作包括 span, partition, splitAt, groupBy 。这些操作用于将集合的元素分开并返回一些子集合。
例如 :
```scala // Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // 分成两个组 val (a, b) = x.span(_ < 5) // 显示 a 和 b 中的元素 println(a) println(b) } }
输出:
List(1, 2, 3, 4) List(5, 6, 7, 8, 9, 10)
在这里, span 将元素分成两部分, 第一部分中的元素满足给定条件, 第二部分中的元素不满足条件。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // 分成两个组 val (a, b) = x.partition(_ < 5) // 显示 a 和 b 中的元素 println(a) println(b) } }
输出:
List(1, 2, 3, 4) List(5, 6, 7, 8, 9, 10)
在这里, partition 将元素分成两部分, 第一部分中的元素满足给定条件, 第二部分中的元素不满足条件。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // 从第二个元素开始分成两个组 val (a, b) = x.splitAt(2) // 显示 a 和 b 中的元素 println(a) println(b) } }
输出:
List(1, 2) List(3, 4, 5, 6, 7, 8, 9, 10)
在这里, splitAt 将元素分成两部分, 前半部分包含列表中从开头到给定元素之前的所有元素, 后半部分包含列表中剩余的元素。
例如 :// Scala程序的子集合 // 检索操作 // 创建对象 object SubCollection { // 主函数 def main(args: Array[String]) { // 创建数字列表 val x = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // 根据奇偶分成两个组 val y = x.groupBy(_ % 2 == 0) // 显示 y 中的元素 println(y) } }
输出:
Map(false -> List(1, 3, 5, 7, 9), true -> List(2, 4, 6, 8, 10))
在这里, groupBy 根据给定条件将元素分组, 然后将这些元素分配给具有相同key的组中。
// 分割操作的 Scala 程序 // 创建对象 object Subdivision { // 主方法 def main(args: Array[String]) { // 创建数字列表 val q = List(7, 9, 11, 15, 17, 19, 22) // 应用分割操作 val r = q.span(_ < 15) // 在两个部分中显示所有元素 println(r) } }
“`输出:
<pre><code class="language-scala line-numbers">(List(7, 9, 11), List(15, 17, 19, 22))
</code></pre>这里,span 将给定的可遍历集合的元素分成两部分,第一部分是通过执行 takeWhile 操作获取的,第二部分是通过执行 dropWhile 操作获取的。 例如:
// 分割操作的 Scala 程序 // 创建对象 object Subdivision { // 主方法 def main(args: Array[String]) { // 创建数字列表 val q = List(17, 29, 31, 36, 37, 39, 42) // 应用分割操作 val r = q.partition(_ < 35) // 在两个部分中显示所有元素 println(r) } }
输出:
<pre><code class="language-scala line-numbers">(List(17, 29, 31), List(36, 37, 39, 42))
</code></pre>这里,partition 将集合分成两部分,第一部分是满足给定条件的元素,第二部分是其余元素。 例如:
// 分割操作的 Scala 程序 // 创建对象 object Subdivision { // 主方法 def main(args: Array[String]) { // 创建数字列表 val q = List(17, 29, 31, 36, 37, 39, 42) // 应用分割操作 val r = q.splitAt(4) // 在两个部分中显示所有元素 println(r) } }
输出:
<pre><code class="language-scala line-numbers">(List(17, 29, 31, 36), List(37, 39, 42))
</code></pre>这里,splitAt 在给定位置将集合元素分成两部分,第一部分通过 take 操作获得,第二部分通过 drop 操作获得。 例如:
// 分割操作的 Scala 程序 // 创建对象 object Subdivision { // 主方法 def main(args: Array[String]) { // 创建数字列表 val x = List(21, 20, 33, 40, 27, 62) // 应用分割操作 val y = x.groupBy { // 部分函数 case z: Int if (z % 3 <span class="text-highlighted-inline" style="background-color: #fffd38;"> 0) => z + 3 case z: Int if (z % 2 </span> 0) => z + 2 } // 显示列表的映射 println(y) } }
输出:
Map(42 -> List(40), 24 -> List(21), 64 -> List(62), 22 -> List(20), 36 -> List(33), 30 -> List(27))
这里,groupBy 根据所给部分函数将可遍历集合划分并返回映射。
* 元素测试方法:<br />
这些方法包括 forall、exists 和 count。这些方法用于测试给定的可遍历集合是否满足指定条件。<br />
<strong>例如:</strong><pre><code class="language-scala line-numbers">//// Scala program of Element test methods
// Creating object
object ElemTest
{
// Main method
def main(args: Array[String])
{
// Creating List of numbers
val q = List(7, 9, 11, 15, 17, 19, 22)
// Applying Element test
// methods
// Checking whether the
// element exists or not
println(q.exists(_ > 22))
println(q.exists(_ > 19))
println(q.exists(_ == 7))
// Checking conditions for
// all elements
println(q.forall(_ > 0))
println(q.forall(_ > 10))
// Count of elements
println(q.count(_ > 15))
}
}</code></pre>
输出:
<pre><code class="language-scala line-numbers">false
true
true
true
false
4
</code></pre>这里,exists 方法用于检查列表中是否存在满足给定条件的元素,而 forall 方法用于检查列表中是否所有元素都满足给定条件。count 方法用于计算满足给定条件的元素数。 // Scala程序的“Element test” // 创建对象 object Elementtest { // 主方法 def main(args: Array[String]) { // 创建数字列表 val x = List(21, 20, 33, 40, 27, 62) // 应用Element测试方法 val y = x forall (_ < 63) // 如果所有元素都小于63,则显示true println(y) } }
“`输出:
true
在这里,如果集合的所有元素都满足给定条件,则 forall 将返回true;否则返回false。
示例:// Scala程序的“Element test” // 创建对象 object Elementtest { // 主方法 def main(args: Array[String]) { // 创建数字列表 val x = List(21, 20, 33, 40, 27, 62) // 应用Element测试方法 val y = x exists (_ < 30) // 如果一些元素小于30,则显示true println(y) } }
输出:
true
在这里,如果集合的一些元素满足给定条件,则 exists 将返回true;否则返回false。
示例:// Scala程序的“Element test” // 创建对象 object Elementtest { // 主方法 def main(args: Array[String]) { // 创建数字列表 val x = List(21, 20, 33, 40, 27, 62) // 应用Element测试方法 val y = x count(_ < 40) // 显示满足给定条件的元素的数量 println(y) } }
输出:
4
在这里, count 将显示集合中满足给定条件的元素数。
阅读更多:Scala 教程 - 子分区操作: