本文概述
你可能也有兴趣阅读以下教程:
- Scala初学者指南
- IF ELSE在Scala
- Scala中的运算子
介绍
来源:维基百科-列表(抽象数据类型)
一个单链列表结构, 实现一个包含3个整数元素的列表(来源:维基百科-列表(抽象数据类型))。
通常, 列表是一系列抽象数据类型, 代表固定数量的值。值可以由程序以编程方式进行操作, 也可以在列表中多次出现。列表的实例在上图中显示为由三个整数值组成的单链接列表。该列表也被认为是数据结构, 并且作为数据结构的列表的一个示例是链接列表。
许多编程语言都提供了对列表的支持, 而其中一个人们广泛使用列表的示例就是Python。通常可以通过在一对分隔符(例如括号(), 方括号[], 大括号{}或尖括号<>)中以逗号, 分号或空格分隔的顺序编写项目来构造列表。诸如Python之类的某些语言可能允许像数组类型一样对列表类型进行索引或切片, 在这种情况下, 数据类型可以更准确地描述为数组(来源:维基百科-列表(抽象数据类型))。
特定于Scala的列表是一个包含不可变数据的集合, 这意味着列表一旦创建, 便无法更改。在Scala中, 该列表表示一个链接列表。
在Scala列表中, 每个元素不必具有相同的数据类型。 Scala列表的实现在构造阶段在内部使用可变状态。在Scala中, 该列表在scala.collection.immutable包下定义, 因此它们是不可变的。最后, Scala列表具有各种方法, 例如添加, 前置, 最大, 最小等。
定义Scala列表的语法
val变量名称:List [类型] =列表(item1, item2, item3)或val variable_name =列表(item1, item2, item3)Scala中的列表主要类似于Scala数组。但是, Scala列表是不可变的, 代表链表数据结构。另一方面, Scala数组是平坦且可变的。
让我们借助示例快速了解以上差异。
Scala列表与Scala数组
首先让我们在Scala中定义一个数组。
然后, 由于scala数组的索引为零, 因此你将在第一个索引处修改一个值, 并查看是否可以更新它。
因此, 从上面的代码片段可以看出, scala数组确实允许你修改第一个索引的值。
现在, 你将定义一个Scala列表, 并尝试模仿与上面相同的列表。
好了, 从上面的示例中, 你可以得出结论, 由于Scala列表是不可变的, 因此更新值会导致错误。
Scala列表方法
- head:此方法返回scala列表的第一个元素。
- tail:此方法返回除第一个元素外的所有元素。
- isEmpty:此方法检查列表是否为空, 在这种情况下, 它将返回True或False。
- fill():此方法创建一个统一列表, 该列表由零个或多个指定元素的副本组成。
- reverse:此方法反转列表的元素。
- $ ::: $或$。::: $或.concat():连接两个或更多列表。
- tabulate():此方法可以将列表制成表格。它的本质与fill()方法相似, 但与fill()方法不同, 它有两个参数。第一个参数给出要创建的列表的尺寸, 第二个参数说明从函数计算出的列表元素。
如果上面的某些方法对你来说没有太大意义, 请不要担心, 因为你将借助示例在Scala中实现它们, 但在此之前, 让我们学习如何定义Scala列表。
你将使用字符串, 整数(一维和二维)数据类型创建Scala列表。你还将学习创建一个由字符串和整数组成的列表。
一维整数列表
一维列表, 带整数和字符串
一维字符串列表
二维清单
列表上的算术运算
在此示例中, 你将使用列表, 而不仅仅是定义变量。与变量不同, 列表可以容纳n个值。你将在两个列表而不是两个变量上执行算术运算。
因此, 让我们快速学习如何完成它。
为了应用算术运算, 你将使用zipped.map函数, 其后是列表x和y。然后, 你将在zipped.map方法中指定要作为参数执行的操作。
最后, 让我们编写一个包含所有这些方法的代码。
object Scala_List_Methods
{
def main(args: Array[String])
{
// define two lists
val x = List(1, 40, 10)
val y = List(20, 25, 30)
val z = List("srcmini", "Tutorials", "Are", "The", "Best")
//Head
println();
println("Head of list x, y, z = " + (x.head, y.head, z.head));
println();
//Tail
println("Tail of list x, y, z = " + (x.tail, y.tail, z.tail));
println();
//isEmpty
println("Is list x, y, z empty? = " + (x.isEmpty, y.isEmpty, z.isEmpty));
println();
//Concatenate
println("Concatenating x, y, z lists with the first method = " + (x:::y:::z));
println("Concatenating x, y, z lists with the second method = " + ((x).:::(y).:::(z)));
println("Concatenating x, y, z lists with the third method = " + (List.concat(x, y, z)));
println();
//Reverse
println("Reverse of x, y, z is = " + (x.reverse, y.reverse, z.reverse));
println();
//Fill
println("Output of Fill method is = " + (List.fill(5)(z)));
println();
//Tabulate
println("Output of Tabulate method is = " + (List.tabulate(5)(x => x * x * x)));
}
}
总结
恭喜你完成了本Scala教程。
请随时在下面的评论部分中提出与本教程相关的任何问题。