集合的综合练习 | 学习笔记

简介: 快速学习集合的综合练习

开发者学堂课程【Scala 核心编程 - 进阶集合的综合练习学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9058


集合的综合练习


内容介绍

一、练习一

二、练习二

三、练习三

四、总结


一、练习一

课堂练习1

val sentence = "AAAAAAAAAABBBBBBBBCCCCCDDDDDDD"  将 sentence 中各个字符,通过 foldLeft 存放到一个 ArrayBuffer 中

目的:

理解flodLeft的用法.

val sentence = "AAAAAAAAAABBBBBBBBCCCCCDDDDDDD” def putArry( arr : ArrayBuffer[Char], c: Char):ArrayBuffer[Char] ={  arr.append(c)

arr

//创建val arr = ArrayBuffer[Char]()

val arr = ArrayBuffer[Char]()

sentence.foldLeft(arr)(putArry)

首先 sentence 是一个字符串,这个字符串要求通过左折叠存放到 arraybuffer 中。

目的理解 flodlef 的用法, foldlef 之前提到过,但是基本讲到的是它的运行机制,具体道理是什么用法。

可以这样理解,最后得到的是 arraybufer ,那么里面就是三个 A,把字符里面的东西都取出来,然后放进 bufer 里面,它是整个拆出来,然后弄到 bufer 里面去。

最后是向传的一个值里面走,现在来看一下代码简单的实现。def putArry( arr : ArrayBuffer[Char], c: Char):ArrayBuffer[Char] ={  arr.append(c)

arr

接收一个 arr.append ,来一个接收一个,然后再返回一个,现在我们来进行一个简单的使用, 写 exercise 02 这是我们第二的一个练习,文字的形式比较难写出,平时我们用的也比较少,那么可以用图片的形式表现出来。

val sentence = "AAAAAAAAAABBBBBBBBCCCCCDDDDDDD” def putArry( arr : ArrayBuffer[Char], c: Char):ArrayBuffer[Char] ={  arr.append(c)

arr

//创建val arr = ArrayBuffer[Char]()

val arr = ArrayBuffer[Char]()

sentence.foldLeft(arr)(putArry)

Println(‘’arrayBuffer = ‘’+arrayBuffer)

Def  putArray(arr:ArrayBuffer[Char],c:char):ArrayBuffer[Char]

//将C 放入到 arr 中

Arr . apend(c)

arr

把东西放进数组里面去,我们要深刻的理解这个转折点,类型是 char 做完之后你要给我一个 char 最后返回的类型始终是一个 arraybuffer 的类型,这个时候我们需要引入 buffer ,

我们将 C 放入到 arr当中,我们前面学过往一个 append 里面放

我们要做的事情是左折叠开始运行,开始它是一个字符串,是一个集合 ,字符串是一个有距集合的点,首先定义一个 val ,

等于 new 的 array buffer ,这个就是同步,就是不停的折,

让 putarray,直接看一下最后的 arraybuffer 是什么样,因为 array buffer 是引用的,因为集合是属于 array for 的类型所以它的改变无需再接收,直接打出来就行,我们看看返回类型跟我们想象的是否一样,当我们运行完了之后,会发现跟我们想象的一样,其实就是把每个打散,然后往里面放,这个题的作用就是让大家更加理解折叠,就是要想办法传一个参数,然后不断往里面扔,因为左折叠是必须要求传一个,如果说用到的是 reduce left ,它会默认往里面减少,左折叠就必须传一个,相当于都往里面操作,代码就理解了,理解折叠第一个传入的参数的含义,取决于之后的代码怎么写。


二、练习二

第二题

课堂练习2

val sentence = "AAAAAAAAAABBBBBBBBCCCCCDDDDDDD"  

使用映射集合,统计一句话中,各个字母出现的次数

提示:Map[Char, Int()

1)看看 java 如何实现

Stringsentence="AAAAAAAAAABBBBBBBBCCCCCDDDDDDD*,

2Map<Character, Integer> charCountMap =

new HashMap<Character, Iinteger>();

char()cs= sentence.toCharArray();

for (char c:cs){

if ( charCountMap.containsKey(c)){

Integer count = charCountMap.get(c);

charCountMap.put(c, count+1),

}else {

charCountMap,put(c,1);3}

System.out.printin(charCountMap),

要求使用集合映射,统计一句话,各个字母出现的次数,并且保留在 map 中,

如果用 java 写,应该没有问题,上面一段 java 代码,那么我先定义一个 map 类型,我将字符串转成一个数组,然后再用 for 循环增强,不停取出 char 要进行判断去统计,

首先我判断要不要包含 C ,首先集合里面有没有包含A,就是你曾经已经往 map 里面放进去了,所以说我就取出值,加1然后再放。scale 怎么理解,基本原理是讲述完毕, sentense 代码就是字符串,

val sentence = "AAAAAAAAAABBBBBBBBCCCCCDDDDDDD"

Det charcount(map:Map[char,int]c:chaer )map[char int]

然后我在这里传入了一个 map ,而且可以看见 map 是可以变的,我传入了一个 map 不可变的实例,然后调用了 charcount ,这理解接收了一个 C,左折叠是这样做的,右边的第二个参数,会依次遍历增,最后返回一个 map ,可以看到这是 map 的一个操作, map 加了一个新的值,值不确定 ,

如果 C 取出来了,如果 C 没有我返回一个0,这样就有效的解决了判断,如果没有我就取个值然后再加一个1,扔进去然后 map的加,如果这个存在,就是更新,分开写也是可以,我们运用一下,

传的 map 进行加,然后加一个1 因为我们没有把它包起来,这充分运用到 map 的运行,调的时候我用 sentence ,我们左折叠,之前就传了一个空的,类型是 int 类型,然后把 charcount 传递,少了一个6,这个是中括号, 最后返回的结果就是我要的结果.

如图:

image.png

我们来打印一下 map2 我们运行之后结果就跟我们想的一样了,用的 map 不太好,这个效率比较低下,修改一下,用可变的 map 来写,我们再写一个代码

//使用可变map实现def charCount2(map:mutable.Map[char,Int],char:char):mutable.Map+=(char - >(map . getorElse(char,0)+1))

第一个是不可变的代码,因为不可变的 map 其实它是每次都产生新的 map ,上面的是不可变的 map ,下面换一个套路,使用可变 map 我在这里写一个 map2 后面这些都应该改一些,加完之后等号就改一下引入包,可变的代码就完成了,我们每次返回的就是它本身,代码就是可以调用的,现在我们使用可变的 map 效率更高.

1.先创建一个可变的 map 作为左折叠的第一个参数,

Val map3 = mutable . Map [Char.Int]()

Sentence.foldleft (map3)(char count2)

比如说 val map3 等于,这个对我们来说应该很容易,这个就是可变的,我们再操作一下 sentence ,把 map3 传进去,代码就完成,如果是不可变,map3 就已经是结果了,看运行效果,执行的一样,只是效果不同,这是我们运行的两个方式。

image.png


三、练习三

第三个题

课后练习3-大数据中经典的 wordcount 案例

val lines = List("atguigu han hello", "atguigu han aaa aaa aaa cccddd uuu")  

使用映射集合,list中,各个单词出现的次数,并按出现次数排序

提示:xXX

它是一个经典的案例,要求使用映射集合,统计各个单词出现的次数,我们是已经可以统计了,按照出现次数排序。这是 every buffer 的一个使用。


四.总结

课堂练习一的评讲是 areay 的使用,第2题是 java 的实现,首先说了 java 是怎么实行,又讲了课堂练习二是 scale 的方式实行折叠 一种是可变的 map 一种是不可变的。

相关文章
|
8月前
|
存储 JavaScript 前端开发
无序中的秩序之美:集合数据为编程世界增添新的维度
无序中的秩序之美:集合数据为编程世界增添新的维度
|
存储 移动开发 算法
八大排序(一)--------排序的基本概念与分类
八大排序(一)--------排序的基本概念与分类
85 0
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
c++ 如何做出实现一组数据的实际索引
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
C++是一种计算机高级程序设计语言, 由​​C语言​​​扩展升级而产生 , 最早于1979年由​​本贾尼·斯特劳斯特卢普​​在AT&T贝尔工
|
存储 算法
算法设计与分析/数据结构与算法实验5:找新数最小的删除方案
算法设计与分析/数据结构与算法实验5:找新数最小的删除方案
138 0
算法设计与分析/数据结构与算法实验5:找新数最小的删除方案
|
算法 搜索推荐
《十大排序算法》让你的思维流动起来。今天的主角又是排序思想你了解多少。每种算法的内容在代码中体现出来。
《十大排序算法》让你的思维流动起来。今天的主角又是排序思想你了解多少。每种算法的内容在代码中体现出来。
203 0
《十大排序算法》让你的思维流动起来。今天的主角又是排序思想你了解多少。每种算法的内容在代码中体现出来。
|
算法 C++
用详细实例说明和典型案例实现对分治法进行全面分析 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
187 0
用详细实例说明和典型案例实现对分治法进行全面分析 | C++
|
机器人 编译器 Python
Python编程基础:实验3——字典及集合的使用
Python编程基础:实验3——字典及集合的相关知识点题目练习
303 0
Python编程基础:实验3——字典及集合的使用
数据结构与算法--算法效率的度量方法
数据结构与算法--算法效率的度量方法
浙大版《数据结构学习与实验指导(第2版)》案例5-1.1:线性探测法的查找函数
浙大版《数据结构学习与实验指导(第2版)》案例5-1.1:线性探测法的查找函数
346 0

热门文章

最新文章