Scala中集合的使用

第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 等基本数据类型,也可以是用户自己定义的类型。

下列代码定义了多种类型的列表:

 
  1. object ForDemo {
  2. def main(args: Array[String]): Unit = {
  3. // 整数列表
  4. val list: Seq[Int] = List(4, 5, 6)
  5. // 字符串列表
  6. val list1: Seq[String] =List("edu","coder")
  7. // 空列表
  8. val list2=List()
  9. // 打印列表
  10. println(list)
  11. println(list1)
  12. println(list2)
  13. }
  14. }

执行结果:

 
  1. List(4,5,6)
  2. List(edu, coder)
  3. List()

2.构造符构造
构造列表的两个基本元素是 Nil 和 ::。Nil 代表一个空列表。:: 的发音为“cons”,它可以把新元素组合到现有列表的最前端,然后返回作为执行结果的新列表。

 
  1. object ForDemo {
  2. def main(args: Array[String]): Unit = {
  3. // 整数列表
  4. val list: Seq[Int] = 1 :: (2 :: (3 :: (4 :: Nil)))
  5. // 字符串列表
  6. val list1: Seq[String] ="edu" :: ("coder" :: Nil)
  7. // 空列表
  8. val list2=Nil
  9. // 打印列表
  10. println(list)
  11. println(list1)
  12. println(list2)
  13. }
  14. }

执行结果:

 
  1. List(1, 2, 3, 4)
  2. List(edu, coder)
  3. List()

列表的常用操作

三个最基本的操作

Scala List 有三个基本操作:

方法名说明
head返回列表第一个元素
tail返回一个列表,包含除了第一元素之外的其他元素
isEmpty在列表为空时返回 true

这些最基本的操作可应用于任何 Scala List 列表。实例如下:

 
  1. object ForDemo {
  2. def main(args: Array[String]): Unit = {
  3. // 字符串列表
  4. val list: Seq[String] ="腾讯":: ("百度" :: ("阿里" :: Nil))
  5. // 打印列表
  6. println("列表中第一家公司是:"+list.head)
  7. println("列表中除了第一家公司之外的公司是:"+list.tail)
  8. println("查看列表是否为空 :"+list.isEmpty)
  9. }
  10. }

执行结果:

 
  1. 列表中第一家公司是:腾讯
  2. 列表中除了第一家公司之外的公司是:List(百度, 阿里)
  3. 查看列表是否为空 :false

连接列表

使用 ::: 运算符或 List.:::() 方法来连接两个或多个列表。实例如下:

 
  1. object ForDemo {
  2. def main(args: Array[String]): Unit = {
  3. // 字符串列表
  4. val list: Seq[String] ="腾讯":: ("百度" :: ("阿里" :: Nil))
  5. // 整数列表
  6. val list1=List(1,2)
  7. val list2=List(3,4)
  8. // 连接列表并打印
  9. println(list1.:::(list2))
  10. println(list1:::list2)
  11. }
  12. }

执行结果:

 
  1. List(3, 4, 1, 2)
  2. List(1, 2, 3, 4)

需要注意的是,上述两种连接方式的连接顺序是不一样的,另外,不同类型的列表是无法拼接的,比如代码中的字符串列表 list 和整数列表 list1 、list2 是无法连接的。

其他常用方法

方法说明
+:为列表添加一个元素,并返回一个新列表
contains检测列表中是否包含某元素
distinct去除重复元素,并返回一个新列表

示例:

 
  1. object ForDemo {
  2. def main(args: Array[String]): Unit = {
  3. // 整数列表
  4. val list1=List(1,2)
  5. // 为列表添加元素2
  6. val list2=2+:list1
  7. println(list2)
  8. // 判断列表是否包含元素1
  9. println(list2.contains(1))
  10. // 去除列表重复元素
  11. println(list2.distinct)
  12. }
  13. }

执行结果:

 
  1. List(2, 1, 2)
  2. true
  3. List(2, 1)

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,连接两个列表并对数据去重,具体要求如下:

  • 接收给定的多行数据(例:4 \n 56 \n 5 \n -10 \n 10,其中第一个数代表列表长度,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有);
  • 将接收到的数据添加进列表,并把该列表连接到列表 list 之后;
  • 对连接后的集合数据去重,并输出去重后的集合。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

例:
测试输入:

 
  1. 4
  2. 3
  3. 4
  4. 6
  5. 2

预期输出:

 
  1. List(2, 4, 5, 3, 6)

开始你的任务吧,祝你成功!

挺简单的,前提是你要认真且仔细

/********** Begin **********/


      val list2=list:::list1 //连接列表
      println(list2.distinct) //去重


    /********** End **********/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

财猿滚滚来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值