Scala 中的迭代器
迭代器是一种逐个访问集合元素的方法。它在语法方面类似于一个集合,但在功能方面的工作方式不同。为任何集合定义的迭代器不会将整个集合加载到内存中,而是一个接一个地加载元素。因此,当数据对于内存来说太大时,迭代器很有用。要访问元素,我们可以使用hasNext()检查是否有可用的元素,使用next()打印下一个元素。
句法:
val v = Iterator(5, 1, 2, 3, 6, 4)
//checking for availability of next element
while(v.hasNext)
//printing the element
println(v.next)
为集合定义迭代器
我们可以为任何集合(数组、列表等)定义一个迭代器,并且可以逐步遍历该特定集合的元素。
例子:
//Scala iterator program
//for defining iterator
//Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
val v = Array(5,1,2,3,6,4)
//val v = List(5,1,2,3,6,4)
// defining an iterator
// for a collection
val i = v.iterator
while (i.hasNext)
print(i.next + " ")
}
}
输出:
5 1 2 3 6 4
访问元素的方法
- 使用 while 循环:访问元素的最简单方法是使用while循环以及hasNext和next方法。
// Scala iterator program // for accessing using while // Creating object object GFG { // Main method def main(args:Array[String]) { // defining iterator val i = Iterator(5, 1, 2, 3, 6, 4) /* OR val v = List(5, 1, 2, 3, 6, 4) val i = v.iterator */ // accessing elements using while loop while (i.hasNext) println(i.next) } }
输出:
5 1 2 3 6 4
- 使用 foreach 动作:我们可以通过将println函数作为参数传递来使用foreach来打印元素。请注意, foreach是一个高阶函数,它以另一个函数作为参数。换句话说, println函数应用于每个元素。
// Scala iterator program // for accessing using foreach // Creating object object GFG { // Main method def main(args:Array[String]) { // defining iterator val i = Iterator(5, 1, 2, 3, 6, 4) /* OR val v = List(5, 1, 2, 3, 6, 4) val i = v.iterator */ // accessing elements using foreach i foreach println // same as i.foreach(println) } }
输出:
5 1 2 3 6 4
- 使用 for 循环:另一种直接的方法是使用for循环。它的工作方式与使用for循环访问任何集合的元素非常相似。
// Scala iterator program
// for accessing using for
// Creating object
object GFG
{
// Main method
def main(args:Array[String])
{
// defining iterator
val i = Iterator(5, 1, 2, 3, 6, 4)
/*
OR
val v = List(5, 1, 2, 3, 6, 4)
val i = v.iterator
*/
// accessing elements using for loop
for(k <- i) println(k)
}
}
输出:
5
1
2
3
6
4
查找具有最小值和最大值的元素
- 使用内置函数min和max迭代器只能遍历一次。因此,我们应该在找到最大值后重新定义迭代器。
// Scala iterator program for minimum // and maximum valued element // using built-in methods // Creating object object GFG { // Main method def main(args:Array[String]) { // defining iterator val i1 = Iterator(5, 1, 2, 3, 6, 4) // calling max function println("Maximum: "+ i1.max) // redefining iterator val i2 = Iterator(5, 1, 2, 3, 6, 4) // calling min function println("Minimum: "+ i2.min) } }
输出:
Maximum: 6 Minimum: 1
- 用户定义的函数返回最小值和最大值。我们可以根据打印最小值和最大值元素的方便定义自己的纯函数。
以下代码打印最小值元素:
// Scala iterator program
// for minimum valued element
// user defined method
// Creating object
object GFG
{
// parameter is an Iterator of Int
// returning Int value
def small(ite : Iterator[Int]) : Int =
{
// storing first value of collection
var mn = ite.next
for(i <- ite)
if(i < mn) mn = i
// returning
mn
}
// Main method
def main(args:Array[String])
{
// defining iterator
val i = Iterator(5, 1, 2, 3, 6, 4)
//calling small function
println("Minimum: "+ small(i))
}
}
输出:
Minimum: 1
以下代码打印最大值元素:
// Scala iterator program
// for maximum valued element
// user defined method
// Creating object
object GFG
{
// parameter is an Iterator of Int
// returning Int value
def large(ite: Iterator[Int]): Int =
{
// storing first value of collection
var mx = ite.next
for(i <- ite)
if(i > mx) mx = i
// returning
mx
}
// Main method
def main(args:Array[String])
{
// defining iterator
val i = Iterator(5, 1, 2, 3, 6, 4)
// calling large function
println("Maximum: "+ large(i))
}
}
输出:
Maximum: 6
注意: large() 和 small() 函数都被编写为两个单独的代码,以减少在线编译器的负担。