第1关:List 列表的使用
- 任务要求
- 参考答案
- 评论3
任务描述
本关任务:连接两个列表并对数据去重。
相关知识
Scala 提供了一套很好的集合实现,Scala 集合分为可变的和不可变的集合。可变集合可以在适当的地方被更新或扩展。也就是说你可以修改,添加,移除一个集合的元素。相比之下,不可变集合类永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。在默认的情况下,Scala 使用的是不可变的集合类。本实训介绍的也是基于不可变集合类。
常见的集合类有 List 列表、Set 集合、Map 映射和元组等。接下来我们将为大家介绍第一种集合---List 列表。
List列表简介
Scala List 列表可以存放重复元素,它有点像数组, 因为它们都是有序存储结构,而且列表中所有元素的类型都一样,但它又不同于数组:
1、列表(List)一旦被创建就不能改变其中的元素;
2、列表(List)底层的数据结构是链接表,而数组是一块连续的内存。
因为列表不可变,所以所有操作它的方法或者构造器都会创建一个新的列表。
定义列表(List)
定义列表有两种方式,分别是实例化 List 对象和构造符构造。
1.实例化 List 对象
我们使用 List[T] 来定义一个 T 类型的列表。T 可以是 String,Int 等基本数据类型,也可以是用户自己定义的类型。
下列代码定义了多种类型的列表:
object ForDemo {
def main(args: Array[String]): Unit = {
// 整数列表
val list: Seq[Int] = List(4, 5, 6)
// 字符串列表
val list1: Seq[String] =List("edu","coder")
// 空列表
val list2=List()
// 打印列表
println(list)
println(list1)
println(list2)
}
}
执行结果:
List(4,5,6)
List(edu, coder)
List()
2.构造符构造
构造列表的两个基本元素是 Nil 和 ::。Nil 代表一个空列表。:: 的发音为“cons”,它可以把新元素组合到现有列表的最前端,然后返回作为执行结果的新列表。
object ForDemo {
def main(args: Array[String]): Unit = {
// 整数列表
val list: Seq[Int] = 1 :: (2 :: (3 :: (4 :: Nil)))
// 字符串列表
val list1: Seq[String] ="edu" :: ("coder" :: Nil)
// 空列表
val list2=Nil
// 打印列表
println(list)
println(list1)
println(list2)
}
}
执行结果:
List(1, 2, 3, 4)
List(edu, coder)
List()
列表的常用操作
三个最基本的操作
Scala List 有三个基本操作:
方法名 | 说明 |
---|---|
head | 返回列表第一个元素 |
tail | 返回一个列表,包含除了第一元素之外的其他元素 |
isEmpty | 在列表为空时返回 true |
这些最基本的操作可应用于任何 Scala List 列表。实例如下:
object ForDemo {
def main(args: Array[String]): Unit = {
// 字符串列表
val list: Seq[String] ="腾讯":: ("百度" :: ("阿里" :: Nil))
// 打印列表
println("列表中第一家公司是:"+list.head)
println("列表中除了第一家公司之外的公司是:"+list.tail)
println("查看列表是否为空 :"+list.isEmpty)
}
}
执行结果:
列表中第一家公司是:腾讯
列表中除了第一家公司之外的公司是:List(百度, 阿里)
查看列表是否为空 :false
连接列表
使用 ::: 运算符或 List.:::() 方法来连接两个或多个列表。实例如下:
object ForDemo {
def main(args: Array[String]): Unit = {
// 字符串列表
val list: Seq[String] ="腾讯":: ("百度" :: ("阿里" :: Nil))
// 整数列表
val list1=List(1,2)
val list2=List(3,4)
// 连接列表并打印
println(list1.:::(list2))
println(list1:::list2)
}
}
执行结果:
List(3, 4, 1, 2)
List(1, 2, 3, 4)
需要注意的是,上述两种连接方式的连接顺序是不一样的,另外,不同类型的列表是无法拼接的,比如代码中的字符串列表 list 和整数列表 list1 、list2 是无法连接的。
其他常用方法
方法 | 说明 |
---|---|
+: | 为列表添加一个元素,并返回一个新列表 |
contains | 检测列表中是否包含某元素 |
distinct | 去除重复元素,并返回一个新列表 |
示例:
object ForDemo {
def main(args: Array[String]): Unit = {
// 整数列表
val list1=List(1,2)
// 为列表添加元素2
val list2=2+:list1
println(list2)
// 判断列表是否包含元素1
println(list2.contains(1))
// 去除列表重复元素
println(list2.distinct)
}
}
执行结果:
List(2, 1, 2)
true
List(2, 1)
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,连接两个列表并对数据去重,具体要求如下:
- 接收给定的多行数据(例:4 \n 56 \n 5 \n -10 \n 10,其中第一个数代表列表长度,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有);
- 将接收到的数据添加进列表,并把该列表连接到列表 list 之后;
- 对连接后的集合数据去重,并输出去重后的集合。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例:
测试输入:
4
3
4
6
2
预期输出:
List(2, 4, 5, 3, 6)
开始你的任务吧,祝你成功!
挺简单的,前提是你要认真且仔细
/********** Begin **********/
val list2=list:::list1 //连接列表
println(list2.distinct) //去重
/********** End **********/