Scala学习(十一)---集合高阶

news2024/11/24 4:37:09

文章目录

  • 1.集合常用方法
  • 2.衍生集合
  • 3.集合的常用函数

1.集合常用方法

class Test_Func {

}
object Test_Func{
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5)//定义一个List集合
    val set = Set(6, 7, 8, 9)//定义一个Set集合

    //1.获取集合长度,length方法
    val lengthList = list.length
    //2.获取集合大小,size方法
    val sizeList = list.size
    println(lengthList)
    println(sizeList)

    //3.循环遍历 foreach
    list.foreach(println)

    //4.迭代器遍历 iterator
    val iterator = list.iterator
    while (iterator.hasNext){
      val i = iterator.next()
      println(i)
    }

    //5.生成字符串方法 
    //mkString
    val string = list.mkString

    //6.是否包含元素contains
    val bool = list.contains(2)
    println(bool)
  }
}

2.衍生集合

衍生集合,顾名思义,在scala中,调用一个方法,原集合保持不变,生成一个新的集合。

   class Test_Change {

}
object Test_Change
{
  def main(args: Array[String]): Unit = {
    val list1 = List(1, 2, 3, 4)
    val list2 = List(4, 5, 6, 7)

    //获取集合的头
    //即获取第一个元素
    val head = list1.head
    println(head)

    //获取集合的尾部
    val tail = list1.tail
    println(tail)

    //获取集合的最后一个元素
    val last = list1.last
    println(last)

    //获取集合初始数据(不包含最后一个)
    val init = list1.init
    println(init)

    //反转
    val reverse = list2.reverse
    println(reverse)
    val reverse1 = (1 to 5).reverse
    println(reverse1)

    //取前(后)n个元素
    val left1 = list2.take(2)//从左边拿2个元素
    println(left1)
    val right1 = list2.takeRight(2)//从右边拿2个元素
    println(right1)

    //去掉前(后)n个元素
    val left2 = list2.drop(2)//从左边拿
    val right2 = list2.dropRight(2)//从右边拿
    
    //并集
    val unionList = list2.union(list1)
    println(unionList)
    
    //交集
    val intersectList = list2.intersect(list1)
    println(intersectList)
    
    //差集
    val diffList = list2.diff(list1)
    println(diffList)

	    //拉链
    //两个集合进行拉链的时候,如果有一个集合元素过多的话,会被扔掉
    val zipList = list2.zip(list1)
    println(zipList)

    //滑窗
    //给定一个数组(-200,50,-10,30,0,-88)求出任意相邻的三个数,乘积最大的是哪三个
    //根据题,以三个元素为一个窗口
    //sliding函数第一个参数为窗口大小,这里为3
    val list3 = List(-200, 50, -10, 30, 0, -88)
    val iterator:Iterator[List[Int]] = list3.sliding(3)
    var result=0;
    for(item<-iterator)
      {
        //product方法是用于算出集合的乘积
        if(item.product>result)
          {
            result=item.product
          }
      }
      println(result)
  }
}

滑窗运行结果:
在这里插入图片描述
可以看到sliding函数将list3集合分成了四个有三个元素的集合,之后通过product方法对每个集合求乘积,由此来将最大的乘积算出。

3.集合的常用函数

    val list4 = List(1, 2, 3, 4, 5)
    //求和
    val sum = list4.sum
    //求乘积
    val product = list4.product
    //最大值
    val max = list4.max
    //最小值
    val min = list4.min

在这里插入图片描述
过滤
所有的高级函数,都有一个默认的foreach逻辑将集合中的元素作为填写函数的传入参数,得到返回结果。如果为true则保留,如果为false,则删除

    val list = List(1, 2, 3, 5, 6, 8, 9, 10)
    val reList = list.filter((i: Int) => i % 2 == 0)
    println(reList)

map转化结构
可以在map中设定输出结构,来对集合进行转化

 val list2 = list.map((i: Int) => i * 2)
    println(list2)
    val list3:List[(String,Int)] = list.map((i: Int) => ("我是", i))
    println(list3)

扁平化
对于集合嵌套的情况下,使用炸裂函数来将嵌套的集合打散。即将嵌套的集合转换为一个集合。

    val list4 = List(List(1, 2, 3), List(1, 5, 6), List(2, 3, 6))
    val flatten:List[Int] = list4.flatten
    println(flatten)
    //元素必须是可以拆分的集合才能使用扁平化
    //字符串可以看作为char的数组
    val list5 = List("Hello", "王总")
    val flatten1 = list5.flatten
    println(flatten1)
    //将长字符串打散为多个单词
    val list6 = List("hello world", "hello scala", "hello spark")
    //需要将"hello world"转换为List("Hello","world")
    val list8 = list6.map((line: String) => {
      val strings: Array[String] = line.split(",")
      strings.toList
    })
    println(list8)
    val flatten2 = list8.flatten
    println(flatten2)

flatMap
flatMap方法就是map+flatten方法的结合,先将结合转换为设定的结构,之后再通过flatten来对集合进行打散。

    val list9 = list6.flatMap((line: String) => {
      val strings: Array[String] = line.split(",")
      strings.toList
    })
    println(list9)

分组函数group by
将多条数据聚合成一条数据,以groupby函数中的返回值的类型为key的类型

    val list10: List[(Int, Int)] = List((1, 10), (2, 30), (3, 30),(1,11),(2,32))
    val map: Map[Int, List[(Int, Int)]] = list10.groupBy((tuple: (Int, Int)) => tuple._1)

    println(map)

    //以奇偶数来进行分组
    val list11 = List(1, 2, 3, 4, 5, 6)
    val groupByOdd = list11.groupBy((i: Int) => i % 2)
    println(groupByOdd)

归约
归约的用法和mapreduce中的reduce方法大致相同。将集合中的元素进行累加操作。

    //reduce方法返回结果的类型和当前元素的类型一致
    val list12 = List(1, 5, 6, 7, 8)
    //如下函数就是一个归约
    var sum=0
    for(elem<-list12)
      {
        sum+=elem
      }
      println(sum)
    //可以使用reduce方法来实现上述代码的逻辑
    //res表示结果,elem表示当前元素
    val i = list12.reduce((res: Int, elem: Int) => res + elem)
    println(i)
    //reduce方法将第一个元素作为初始值进行累加即1+5*2+6*2......
    list12.reduce((res: Int, elem: Int) => res + elem*2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot如何与其他技术进行集成,如Spring Cloud、Spring Security、Spring Data等?

Spring Boot与其他技术集成 Spring Boot 是一个快速构建 Spring 应用程序的框架&#xff0c;它提供了自动配置和快速开发的特性&#xff0c;使得开发人员可以更加专注于业务逻辑的实现而不是搭建框架。Spring Boot 可以轻松集成其他 Spring 生态系统中的技术&#xff0c;例如 …

pnpm无法加载文件 (解决方法 )

例如&#xff1a;我现在要运行一个TS的项目&#xff0c;我的电脑上没有安装pnpm&#xff0c;导致我的vscode一直报错无法加载 Pnpm安装 npm install -g pnpm pnpm : 无法加载文件 pnpm : 无法加载文件 C:\Users\HP\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁…

微念“跌倒”,李子柒也吃不饱

文 | 螳螂观察 作者 | 青月 “共有从前&#xff0c;各有未来。” 杨幂官宣与嘉行传媒结束合作关系的微文&#xff0c;同样适用于现在的微念与李子柒。 李子柒与微念之间的这场MCN机构与网红IP之间由于利益分配的矛盾&#xff0c;经过500多天的博弈后&#xff0c;最终以李子柒…

2.6. Java内存管理与垃圾回收

2.6.1. Java内存模型 在Java中&#xff0c;内存被划分为以下几个区域&#xff1a; 堆&#xff08;Heap&#xff09;&#xff1a;存储对象实例和数组&#xff0c;是垃圾回收的主要区域。栈&#xff08;Stack&#xff09;&#xff1a;存储局部变量和方法调用。每个线程有自己的…

Python scapy二层、三层发送接收数据包

环境&#xff1a; Linux环境&#xff1a;安装scapy&#xff0c; 执行scapy 安装scapy yum install python3-pip (安装python3 pip) pip3 install --upgrade pip yum remove python-pip&#xff08;删除pip&#xff09; pip3 install scapy (安装scapy) 简介&#xff1a; …

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月29日论文合集)

文章目录 一、检测相关(12篇)1.1 Linear Object Detection in Document Images using Multiple Object Tracking1.2 Hybrid Energy Based Model in the Feature Space for Out-of-Distribution Detection1.3 BEV-IO: Enhancing Birds-Eye-View 3D Detection with Instance Occu…

原来你是这样的5G 一文了解亚马逊云科技的云上5G专网

根据麦肯锡公司发布的《2021年离散制造业上云调查》报告显示&#xff1a;云转型所带来的IT价值仅占其潜在价值的5&#xff05;&#xff0c;但其业务价值高达95&#xff05;。随着云计算技术的快速发展以及云的IT价值在敏捷性、弹性和经济性几个方面的充分呈现加上同5G技术和应用…

8项seo的日常工作

SEO的日常工作涵盖了一系列任务和活动&#xff0c;旨在优化网站以提高在搜索引擎中的排名和可见性。 以下是SEO的日常工作内容&#xff1a; 关键词研究和优化&#xff1a;定期进行关键词研究&#xff0c;寻找与目标受众和业务相关的热门关键词。优化网站内容、标题、元描述和链…

《Cocos Creator游戏实战》签到日历实现思路

在线体验地址 Cocos Creator | SignCalendar Cocos Store 购买地址&#xff08;如果没有显示&#xff0c;那就是还在审核&#xff09;&#xff1a; https://store.cocos.com/app/detail/4975微店购买地址&#xff1a; https://weidian.com/item.html?itemID6354270477 运行效…

【书评】《写作脑科学》杨滢(@屠龙的胭脂井)

《写作脑科学》是一本介绍写作与脑科学关系的书籍&#xff0c;作者是杨滢。 本书通过对脑科学的研究和分析&#xff0c;揭示了写作的本质和技巧&#xff0c;为写作者提供了有益的指导和启示。 本书的主要内容分为八个部分 第1章 为什么写作跟大脑有关第2章 快速写作&#xff…

Photoshop 2023 Beta 内置Ai绘图功能介绍安装教程

距离Adobe软件公司首次将图像编辑及数字绘画软件Photoshop推出到大众面前已经过去35年&#xff0c;最近该公司又再次书写了属于Photoshop的历史新篇章。 最近&#xff0c;Adobe 宣布 Photoshop&#xff08;Beta&#xff09;迎来更新&#xff0c;新增「创意填充&#xff08;Gen…

3.3. 日期与时间类(Date、Calendar、LocalDate等)

在Java中&#xff0c;我们经常需要处理日期和时间。Java提供了一些类来帮助我们完成这些任务&#xff0c;如Date、Calendar、LocalDate、LocalTime、LocalDateTime和ZonedDateTime等。我们将分别介绍这些类&#xff0c;并给出相应的示例。 1. Date类 Date类是Java提供的一个表…

Redis的地理位置(GEO)+Hypterloglog+事务测试

GEOADD 命令 - 将指定的地理空间位置&#xff08;纬度、经度、名称&#xff09;添加到指定的key中&#xff0c;这些数据将会存储到sorted set 有效的经度从-180度到180度。有效的纬度从-85.05112878度到85.05112878度。 当坐标位置超出上述指定范围时&#xff0c;该命令将会返…

chatgpt赋能python:Python中Numpy报错分析

Python中Numpy报错分析 Numpy是Python中重要的开源数值计算库&#xff0c;它提供了数组和矩阵的操作。在使用Numpy的过程中&#xff0c;有时候我们会遇到一些报错信息&#xff0c;本文将对常见的Numpy报错进行分析和解决方法的介绍。 NumPy报错信息 当我们在使用Numpy时出现…

融合PWA技术的小程序:为用户带来原生应用体验

PWA代表“渐进式网络应用”&#xff08;Progressive Web Application&#xff09;。它是一种结合了网页和移动应用程序功能的技术概念。PWA旨在提供类似于原生应用程序的用户体验&#xff0c;包括离线访问、推送通知、后台同步等功能&#xff0c;同时又具有网页的优势&#xff…

AIGC领域优秀的资源汇总(应用、论文、开源项目)

AIGC领域介绍&#xff0c;及一些比较优秀的应用&#xff0c;和论文&#xff0c;开源项目汇总。 AIGC大纲 一、AIGC概念 ​ AIGC&#xff0c;全名“AI generated content”&#xff0c;又称生成式AI&#xff0c;意为人工智能生成内容。例如AI文本续写&#xff0c;文字转图像的…

NRF52系列多个 base uuid 的问题,以client为例。

基础uuid知识 nordic的nrf sdk希望我们设置uuid的方式跟蓝牙技术联盟SIG的方式一样&#xff0c;也就是服务和特性的uuid是基于同一个base uuid修改产生的&#xff0c;比如base uuid是0x0000xxxx-0000-1000-8000-00805F9B34FB&#xff0c;那么服务和特性的128bit uuid就要基于此…

java8内部调用无法引用值的问题

问题&#xff1a;Variable used in lambda expression should be final or effectively final 具体原因&#xff1a; 这段代码试图将 20 赋给一个局部变量&#xff0c;它无法通过编译&#xff0c;但绝非编写错误。 这实际上是语言的设计者有意为之&#xff0c;用以鼓励用户使用…

优化版本 穿越火线(CF) FPS AI 自瞄 代码 权重 数据集(下面有链接)

更新初衷 本人在制作过程中&#xff0c;有一些爱钻研的朋友来问以及提出增加一些新的功能点回会更好&#xff0c;本着学习研究态度&#xff0c;在第一个版本上进行优化&#xff0c;增加一些内容 不喜欢看过程的小伙伴直接看最下面 界面 解决问题&#xff1a; 1、进入慢 2、无…

PyTorch-完整的模型训练套路

目录 1. 准备 1.1 使用Cifar10 1.2 item的用法 1.3 model的搭建 1.4 数据集、参数设置以及训练开始 1.5 测试集 1.6 使用tensorboard 1.7 保存每一轮的训练结果 2. 计算整体的正确率 3. 其他 3.1 train与eval 3.2 使用GPU训练 1. 准备 1.1 使用Cifar10 1.2 item的…