📜  Scala 中的迭代器

📅  最后修改于: 2022-05-13 01:54:53.423000             🧑  作者: Mango

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 


访问元素的方法

  1. 使用 while 循环:访问元素的最简单方法是使用while循环以及hasNextnext方法。
    // 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
    
  2. 使用 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
    
  3. 使用 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


查找具有最小值和最大值的元素

  • 使用内置函数minmax迭代器只能遍历一次。因此,我们应该在找到最大值后重新定义迭代器。
    // 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() 函数都被编写为两个单独的代码,以减少在线编译器的负担。