Scala-数组(Array)、列表(List)

news/2024/4/25 16:36:23/文章来源:https://blog.csdn.net/dafsq/article/details/129249684

数组

不可变数组

 可变数组

可变数组和不可变数组的转换

二维数组

列表

不可变 List

合并列表

可变列表


数组

不可变数组

val arr1 = new Array[Int](10)
  1. new 是关键字
  2. [Int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定 Any
  3. (10),表示数组的大小,确定后就不可以变化

不可变数组定义和访问 

object test {def main(args: Array[String]): Unit = {//创建不可变数组val arr1 : Array[Int] = new Array[Int](10)//另一种创建方式val arry2 = Array(1,2,3,4,5,6,7,8,9)//访问数组中的元素println(arry2(1))//赋值arr1(0) = 10arr1(1) = 11}
}

不可变数组遍历

object test {def main(args: Array[String]): Unit = {//创建不可变数组val arry = Array(1,2,3,4,5,6,7,8,9,10)//数组遍历1普通循环for (i <- 0 until arry.length){println(arry(i))}//数组遍历2 使用indicesfor (i <- arry.indices) {println(arry(i))}//数组遍历3 直接遍历所有元素(增强for循环)for (i <- arry){println(i)}//数组遍历4 迭代器val iter = arry.iteratorwhile (iter.hasNext){println(iter.next())}//数组遍历5 foreach方法arry.foreach( (i : Int) => println(i))//致简原则 arry.foreach(println)//所有数据转换成String拼接到一起println(arry.mkString("_")) //括号内为连接符}
}

不可变数组添加元素

object test {def main(args: Array[String]): Unit = {//创建不可变数组val arry = Array(1,2,3,4,5,6,7,8,9,10)//向后添加元素val newArry1 =arry.:+(11) //使用 :加号放冒号后代表向后添加 ":+()"方法进行添加 并克隆新的添加对象后的数组println(newArry1.mkString(" "))//向前添加元素val newArry2 = arry.+:(0) //使用 :加号放冒号前代表向前添加 "+:()"方法进行添加 并克隆新的添加对象后的数组println(newArry2.mkString(" "))//简化添加方法val newArry3 = newArry1 :+ 15 //加号放冒号后代表向后添加val newArry4 = 20 +: newArry1 //添加数在前代表向前添加 //连续叠加val newArry5 = 10 +: 20 +: newArry1 :+ 50 :+ 60println(newArry5.mkString(" "))}
}

 可变数组

val arr01 = ArrayBuffer[Any](3, 2, 5)
  1. [Any]存放任意数据类型
  2. (3, 2, 5)初始化好的三个元素
  3. ArrayBuffer 需要引入 scala.collection.mutable.ArrayBuffer
 //创建可变数组val arry1 : ArrayBuffer[Int] = new ArrayBuffer[Int]()val arry2 = ArrayBuffer(21,22,23,24,25,26,27,28,29,30)//输出println(arry2.mkString(" "))println(arry2)//访问元素 对数组操作需要注意不要对数组越界println(arry2(0)) 

 可变数组添加元素

 //创建可变数组val arr = ArrayBuffer(1,2,3,4,5,6,7,8,9,10)val arr2 = new ArrayBuffer[Int]//添加元素//  末尾添加arr += 19 //可变数组中使用+=来给末尾添加元素println(arr)//向前添加22 +=: arrprintln(arr)//使用append方法添加arr.append(20)//向后添加arr.prepend(1)//向前添加arr.insert(1,10) //任意索引位置添加arr.insertAll(1,arr2)//任意索引位置追加数组arr.appendAll(arr2) //向前追加数组arr.prependAll(arr2)//向后追加数组println(arr)

  可变数组删除元素

//创建可变数组val arr = ArrayBuffer(1,2,3,4,5,6,7,8,9,10)//删除元素arr.remove(1,2) //删除索引元素remove(索引,删除个数)arr -= 13 //"-="代表删除数组中的某一个元素println(arr)

可变数组和不可变数组的转换

arr1.toBuffer //不可变数组转可变数组
arr2.toArray //可变数组转不可变数组
  • arr2.toArray 返回结果才是一个不可变数组,arr2 本身没有变化
  • arr1.toBuffer 返回结果才是一个可变数组,arr1 本身没有变化
 //转换为不可变数组val newArry = arr.toArrayprintln(newArry.mkString(" "))println(newArry)

二维数组

val arr = Array.ofDim[Double](3,4)

二维数组中有三个一维数组,每个一维数组中有四个元素 

   //创建二维数组val arry = Array.ofDim[Int](2,3) //创建2行3列的二维数组//访问元素arry(1)(0) = 19 //第2行第1个元素位置赋值19//遍历打印for (i <- 0 until arry.length; j <- 0 until arry(i).length){ //双重for循环遍历二维数组println(arry(i)(j))}//使用indices作为限制进行循环打印for (i <- arry.indices; j <- arry(i).indices){ //双重for循环遍历二维数组println(arry(i)(j) +"\t")if (j == arry(i).length -1){ //如果到了第一行数组最后一位元素 则换行(美观)println()}} //使用foreach遍历arry.foreach(i => i.foreach(println))

列表

不可变 List

  1. List 默认为不可变集合
  2. 创建一个 List(数据有顺序,可重复)
  3. 遍历 List (4)List 增加数据
  4. 集合间合并:将一个整体拆成一个一个的个体,称为扁平化
  5. 取指定数据
  6. 空集合 Nil
//创建不可变列表val lis = List(1,2,3,4,5,6,7,8,9,10) //不使用new来创建println(lis)//访问元素println(lis(0))//遍历lis.foreach(println)//添加元素val lis2 = lis.+:(10)//向前添加val lis3 = lis.:+(10)//向后添加val lis4 = lis.::(50)//添加到列表前面println(lis4)val lis5 = Nil.::(1)//定义空列表向前添加一个元素

合并列表

//创建不可变列表val lis1 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val lis2 = List(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)//创建合并列表val lis3 = lis1 ::: lis2println(lis3)val list4 = lis1 ++ lis2

可变列表

 ListBuffer 

 //创建可变列表val lis1 = new ListBuffer[Int]()val lis2 = ListBuffer(1,2,3,4,5,6,7,8,9)//添加元素lis2.append(10)lis2.prepend(0)lis2.insert(1,10)//连接列表val lis3 = lis2 ++ lis1//修改元素lis2(3) = 30 // lis2(索引位置) = 值lis2.update(0,20) //lis2.update(索引位置,值)//删除元素lis2.remove(2)//索引lis2 -= 25 //具体值

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html实现浪漫的爱情日记(附源码)

文章目录1.设计来源1.1 主界面1.2 遇见1.3 相熟1.4 相知1.5 相念2.效果和源码2.1 动态效果2.2 源代码2.3 代码结构源码下载更多爱情表白源码作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/129264757 html实现浪漫的爱情…

Javaweb复习之HTTPTomcatServelet

1.Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb就是用Java技术来解决相关web互联网领域的技术栈 1.2 JavaWeb技术栈 B/S 架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器 架构模…

Linux: malloc()的指向指针发生指向偏移后,释放前需要将指针指向复原。

Linux: malloc()的指向指针发生指向偏移后&#xff0c;释放前需要将指针指向复原。 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <time…

MIT:只需一层RF传感器,就能为AR头显赋予“X光”穿透视力

近年来&#xff0c;AR在仓库、工厂等场景得到应用&#xff0c;比如GlobalFoundries、亚马逊、菜鸟裹裹就使用摄像头扫描定位货品&#xff0c;并使用AR来导航和标记。目前&#xff0c;这种方案主要基于视觉算法&#xff0c;因此仅能定位视线范围内的目标。然而&#xff0c;在一些…

C++ string类(二)及深浅拷贝

一、string类方法使用举例1.迭代器迭代器本质&#xff1a;指针&#xff08;理解&#xff09;迭代器&#xff1a;正向迭代器&#xff1a; begin() | end() 反向迭代器&#xff1a; rbegin() | rend()2.find使用//找到s中某个字符 void TestString3() {string s("AAADEFNUIE…

携程面经1

面经 HDFS读写流程 1.读流程 客户端向NameNode发起读请求&#xff08;如果存在&#xff09;NameNode返回一批block地址客户端与第一个block的拓扑距离最近的节点建立连接以packet&#xff08;64kb&#xff09;的单位读取数据块。一个block读取完成后客户端会断开与该DataNod…

5个开源的Java项目快速开发脚手架

概览 &#xff1a; GunspigRuoYiJeecg-bootiBase4J 一、Guns 推荐指数 &#xff1a;⭐⭐⭐⭐⭐ 简介 采用主流框架 &#xff1a; 基于 Spring Boot2.0版本开发&#xff0c;并且支持 Spring Cloud Alibaba 微服务。功能齐全 &#xff1a;包含系统管理&#xff0c;代码生成&a…

这么强才给我28k,我头都不回,转身拿下40k~

时间真的过得很快&#xff0c;眨眼就从校园刚出来的帅气小伙变成了油腻大叔&#xff0c;给各位刚入道的测试朋友一点小建议&#xff0c;希望你们直通罗马吧&#xff01; 如何选择自己合适的方向 关于选择测试管理&#xff1a; 第一&#xff0c;你一定不会是一个喜欢技术&…

Vue的组件(注册、局部、组件复用、props、emit、生命周期)全解

文章目录前言知识点组件注册局部组件组件复用组件间通信props 类型检测子父组件通信之 emit动态组件生命周期函数前言 Vue 支持模块化和组件化开发&#xff0c;可以将整个页面进行模块化分割&#xff0c;低耦合高内聚&#xff0c;使得代码可以在各个地方使用。 知识点 组件注册…

accent-color一行代码,让你的表单组件变好看

不做切图仔,从关注本专栏开始 文章目录 不做切图仔,从关注本专栏开始前言兼容性语法继承性智能前言 在之前的网站开发中,我们是很难去更改的你某些控件的颜色。我们可能要使用各种技巧来自定义我们的控件。好消息是,今天如果我们想要去改变控件的颜色,css为我们提供了一些…

心系区域发展,高德用一体化出行服务平台“聚”力区域未来

交通&#xff0c;是城市的血脉。通过对人、资源、产业的连接&#xff0c;交通建设往往是城市和区域经济发展的前提。不过&#xff0c;在度过了“要想富&#xff0c;先修路”的初级建设阶段后&#xff0c;交通产业内部也出现了挑战&#xff0c;诸如城市秩序、发展成本、用户使用…

【目标检测】Dynamic Head Unifying Object Detection Heads with Attentions

文章目录一、背景二、方法2.1 scale-aware attention2.2 spatial-aware attention2.3 task-aware attention2.4 总体过程2.5 和现有的检测器适配2.6 和其他注意力机制的关联三、效果四、代码论文链接&#xff1a; https://arxiv.org/pdf/2106.08322.pdf代码链接&#xff1a;htt…

Windows 安装RocketMQ

文章目录一、RocketMQ是什么&#xff1f;二、准备工作1.环境要求2.下载与解压3.启动MQ4. 测试是否成功启动三、安装管理端1. 代码下载2. 修改配置文件3. 启动MQ客户端jar包四、rocketMQ代码的使用入门五、问题记录1. 启动mqbroker.cmd没有反应2.消费者重复消费消息一、RocketMQ…

NCRE计算机等级考试Python真题(六)

第六套试题1、算法的时间复杂度是指A.执行算法程序所需要的时间B.算法程序的长度C.算法程序中的指令条数D.算法执行过程中所需要的基本运算次数正确答案&#xff1a; D2、下列关于栈的叙述中正确的是A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进…

【Django功能开发】如何正确使用定时任务(启动、停止)

系列文章目录 【Django开发入门】ORM的增删改查和批量操作 【Django功能开发】编写自定义manage命令 文章目录系列文章目录前言一、django定时任务二、django-apscheduler基本使用1.安装django-apscheduler2.配置settings.py的INSTALLED_APPS3.通过命令生成定时记录表3.如何创…

嵌入式 linux 系统开发网络的设置

目录 一、前言 二、linux网络静态地址设置 前言 为什么要对linux系统下的ubuntu进行网络设置呢&#xff1f; 因为我们在嵌入式开发中&#xff0c;我们要保证windows系统、linux系统、开发板的ip要处于同一个网段&#xff0c;而默认ubuntu下的linux系统的ip是动态分配的&#…

如何彻底删除SQL Server 2008中的登录账号

我个人遇到的最烦人的事情之一是 SQL Server Management Studio中“服务器名称和登录名”对话框的下拉列表。 以下是我想从 SSMS 连接屏幕中删除某些内容的两种情况: 键入的服务器名称不正确 服务器将来不需要。当我看到服务器的名称,它已经存在了很长一段时间,我知道我不会…

图像处理实战--Opencv实现人像迁移

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用Opencv实现人像迁移&#xff0c;欢迎大家一起参与探讨交流~ 本文目录&#xff1a;一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…

Day21【元宇宙的实践构想07】—— 元宇宙与人工智能

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 &#x1f91e; 作者&#xff1a;那就叫我亮亮叭 &#x1f4d5; 专栏&#xff1a;元宇宙 0.0 写在前面 “元宇宙”在2021年成为时髦的概念。元宇宙到底是什么&#xff1f;元宇…

【论文笔记】Decoupling Representation and Classifier for Long-Tailed Recognition

这一篇其实并不是提出什么新的东西&#xff0c;而且是做了点类似综述的技术调用实验。省流&#xff1a;T-normalization最好用 摘要 现状&#xff1a;Existing solutions usually involve class-balancing strategies, e.g. by loss re-weighting, data re-sampling, or tran…