Scala 序列的理解力

Scala 序列的理解力

Comprehensions的结构为(enumerators) yield e ,其中enumerators指的是一个分号分隔的枚举器列表。枚举器要么是一个引入新变量的生成器,要么是一个过滤器。编译器对枚举器生成的每个绑定体e进行评估,并返回这些值的序列。在此,Scala提供了一个轻量级的符号来传达 序列理解。 在序列中,有可能在没有平面图的情况下进行多次提取。这可以通过两种方法实现,一是进行卡特尔乘积重复,二是通过对象的序列列表进行排序。还有一种不使用平面地图的方法是为Scala中的验证计划一个特殊的自动生成的语法。

序列理解 语句有生成器部分,它从指定的输入范围中生成一个值列表,还有一个语句对这些生成的元素进行操作,然后存储在输出列表中,在计算结束后返回。每一个支持Filter、map和flatMap操作的数据类型(有适当的类型)都可以用于序列理解。
让我们了解一些例子。

例子#1:

// Scala program of sequence comprehensions
 
// Creating an object with extending APP
object CT extends App
{
    // Defining function with sequence comprehensions
    def even(from: Int, to: Int): List[Int] =
    for (a <- List.range(from, to) if a % 4 == 0) yield a
        Console.println(even(0, 20))
}

输出:

List(0, 4, 8, 12, 16)

在这个例子中,一个新的整数变量 i 与列表 List(from, from + 1, …, to -1) 中的所有数值相连接。如果 i % 4 == 0 ,它会从列表中删除所有的奇数,并给出0, 20之间完全被4整除的数字的输出。

例子#2:

// Scala program of sequence comprehensions
 
// Creating object with extending App
object ComprehensionTest2 extends App
{
    // Defining function with sequence comprehensions
    def AddTill(n: Int, x: Int) =
        for (i <- 0 until n;
            j <- i until n if i + j == x) yield
        (i, j);
         
    // Calling function
    AddTill(12, 20) foreach
    {
        case (i, j) =>
        println(s"(i,j)")
    }
}

输出:

(9, 11)
(10, 10)

这里的例子表明,序列理解并不局限于列表–每个操作都支持flatMap。因此,输出计算的是0到n-1之间的所有数字对,其总和等于给定值 x。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程