Scala之Array数组

可修改Array

Scala 复制代码
import scala.collection.mutable.ArrayBuffer
//Array:数组
//可修改的:ArrayBuffer
//不可修改的:Array
object Test1 {
  //可修改的:ArrayBuffer
  def main(args: Array[String]): Unit = {
    //1.新建
    val arr1 =ArrayBuffer(1,2,3)
    //2.添加
    arr1 +=4
    arr1.insert(0,100)
    //3.删除
    arr1-=3//删除指定元素
    arr1.remove(0)//删除指定位置(下标)的元素
    //4.修改。通过下标来修改
    arr1(0)=50//把下标为0的元素赋值为50
    //注意 下标不能越界。有效的范围是:0-长度-1
    println(arr1.length)//length 长度,用来获取元素的个数
    println(arr1(10))//IndexOutOfBoundsException
    //5.查询
    //5.1  判断某个元素在数组中是否存在
    println(s"50在数组中吗?${arr1.contains(50)}")
    //5.2找到指定的元素的下标
    //-1:表示这个元素在数组中不存在!
  println(s"500在数组中的下标是?${arr1.contains(500)}")
    //6.遍历
    //for, foreach,iterator
    //for(i<-arr1)println(i)
    //println("-"*50)
    //arr1.foreach(println)
    //println("-"*50)
    for(i<-arr1)println(i)
    println("-"*50)
    arr1.foreach(println)
    println("-"*50)
    val it1=arr1.iterator
    while (it1.hasNext)
      println(it1.next())
  }
}

不可修改Array

Scala 复制代码
  //不可变的Array:长度不可变
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1, 2, 3)
    arr1(0) = 100
    arr1.foreach(println)

    //数组的常用的方法 (对于可变和不可变的数组都可以使用)
    //1.截取。从源数组中,取一部分,组成一个新的数组
    //arr1.slice(起点下标-不包括)
    val arr2=arr1.slice(2,5)
    arr2.foreach(println)
    //2.遍历.foreach
    //3.映射 map
    //Array(1,2,3)-------->Array(2,4,6)
    val arr3 =Array(1,2,3).map(_*2)
      arr3.foreach(println)//(2,4,6)
    //4.过滤filter
    println("-"*50)
    val arr4=Array(2,3,4,5,6).filter(e=>e%2==1)
    arr4.foreach(println)
    //5.折叠reduce
  println(Array(1,2,3,4).reduce((a,b)=>a+b))
  println("-"*50)

    //多维数组
    val arr5=Array(Array(1,2,3),
    Array(4,5,6),
    Array(7,8,9))
    //9
    println(  arr5(2)(2)  )
    //4
    println(  arr5(1)(0)  )
    //创造二维数据
//    val arr6=Array.ofDim[Int](3,3,3)
//    arr6(0)(0)(0)=1
    //由一维数组接化得到二维的数组
val arr6=Array(2,3,4,5,6).grouped(3)//对数组中的元素,三组一个,升级为二维数组
    while (arr6.hasNext){
      val rs =arr6.next()
      println(rs(0))
    }

run......

课后小习题

1.下面关子不可变数组说法正确的是?(C)

A.可以随时修改其元素的值。

B.可以改变其大小。

C.-旦创建,内容和大小都不能改变。

D.不能使用素引访问

2.要创建-个可变 Array,需要(B**)**

A.使用 val 关键字和 Arrey 类型。

B.导入scala.collection.mutable.ArrayBuffer,并使用

C,直接使用 Array 类型,无需导入其他库。

D.使用 vax 关键字和 Array 类型。

3.对于-个 Array,获取其长度使用(B)

A.可以随时修改其元素的值。

B.可以欧变其大小

C.一旦创建,内容和大小都不能改变。

D.不能使用索引访问无素。

4.创建一个可变Array,要(B

A使用val关键字和Array共型。

B.等入scala. collection mutable.ArrayBuffer并使用它创建。

C.直接使用Array兴型,无善导入共他库。

D.使用war关键字和Array共型。

5.财于一个Ary。联取美长庆使用(B

A.SLze属性。

B. length 黑性

C.count方法

D.没有专门的方法或属性获取长度。

6.在多维数组中,访问无素需要(B )

A.使用一个索马。#

B.根据维度数量使用相应数量的索引。

C.不能直接访问无素。

D,使用特殊的访问方法。

7.grouped方法的作用是(B )

A.将数组无素随机打乱。

B.将数组按照指定大小分组。

C.对数纪无素进行排序。

D.计算数组无素的总和。

操作任务

梦想清单管理

Scala 复制代码
case class DreamItem(content: String, isCompleted: Boolean, dueDate: String, priority: Int)

import scala.collection.mutable.ArrayBuffer

object DreamListManagement {
  def main(args: Array[String]): Unit = {
    // 创建可变的DreamItem数组
    val dreamList = ArrayBuffer[DreamItem]()

    // 添加3个梦想
    dreamList += DreamItem("稳定的工作", false, "2034-12-31", 3)
    dreamList += DreamItem("一个自己房子", false, "2035-06-30", 2)
    dreamList += DreamItem("养一只狗狗", false, "2034-11-30", 1)

    // 将第2个梦想设置为已完成
    dreamList(1) = dreamList(1).copy(isCompleted = true)

    // 调高第3个梦想的优先级,这里假设调高到5
    dreamList(2) = dreamList(2).copy(priority = 5)

    // 根据优先级从高到低排序
    val sortedDreams = dreamList.sortBy(_.priority)(Ordering.Int.reverse)

    // 把优先级排名前5的梦想保存到一个新的列表中
    val topFiveDreams = sortedDreams.take(5)

    // 循环输出梦想列表
    topFiveDreams.foreach { dream =>
      println(s"内容: ${dream.content}, 是否完成: ${dream.isCompleted}, 截止日期: ${dream.dueDate}, 优先级: ${dream.priority}")
    }
  }
}

run.....

相关推荐
__lost11 分钟前
Python 使用 OpenCV 将 MP4 转换为 GIF图
开发语言·python·opencv
霍夫曼vx_helloworld735226 分钟前
(二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
开发语言·python
誓约酱30 分钟前
Linux 下进程基本概念与状态
linux·运维·服务器·开发语言·c++
小奏技术31 分钟前
聊聊HTTP2中的GOAWAY帧以及RocketMQ对GOAWAY的实现
后端·网络协议
学习前端的小z31 分钟前
【C语言】深入剖析 C 语言中数组与指针的紧密联系及高效应用
c语言·开发语言
神仙别闹31 分钟前
基于Python实现三种不同类型BP网络及分析
开发语言·python
Code_Artist37 分钟前
细说Linux操作系统的网络I/O模型
linux·后端·网络协议
喵呜角角39 分钟前
QML TableView(Qt_6_5_3_MinGW_64)
开发语言·qt·qml·qt quick
MZWeiei1 小时前
实现List接口的三类-ArrayList -Vector -LinkedList
java
怀旧6661 小时前
Java List 集合
java·数据结构·后端·list·个人开发