当前位置: 首页 > news >正文

Scala 之数组

可变数组与不可变数组

import scala.collection.mutable.ArrayBuffer// 不可变数组。 长度不可变,但是元素的值可变
object Demo1 {def main(args: Array[String]): Unit = {// 不可变数组定义方式// 未初始化有默认值 Int  =>  0val  arr1 : Array[Int] = new Array[Int](5)val  arr2 : Array[Int] = Array(2,2,2,2,2)val  arr3 = Array(3,3,3,3,3)//  对元素值改变。不会创建新数组arr1(0) = 3arr1.update(4,5)println(arr1.mkString(","))//数组遍历for(i<- 0 until arr1.length)      println(arr1(1))for(ele <- arr1)                        println(ele)val iterator = arr1.iteratorwhile(iterator.hasNext)    println(iterator.next())arr1.foreach(x => println(x))arr1.foreach(println(_))// 函数体只有一句,并且使用了已经存在函数,且参数是一一对应,那么此时参数列表可以省略arr1.foreach(println)//数组扩容   创建新数组。val r1 = arr1 :+ 9val r2 = arr1.+:(9)// +: 的: 要对着变量。否则就得 .+: 调用val r3 = 8 +: arr1 :+8 :+ 8println("---------------"+arr1.mkString("/"))println(r3.mkString("-"))//数组与数组的合并  ++ ++: :++ 产生新数组,都是在数组后拼接val v1 = arr1 ++ arr2val v2 = arr1.concat(arr3)//运行结果为  3|0|0|0|5|3|3|3|3|3   val v1 = arr1 ++ arr2 这里并不对arr1产生影响 。println(v2.mkString("|"))//创键范围内固定步长数组,含头不含尾val v3 =  Array.range(0,10,2)println(v3.mkString(","))//创建数组,并用指定逻辑产生的数据填充//   def fill(n: Int)(elem: => T): Array[T] = ???    柯理化函数  传名函数// ({})  这种形式, () 或 {} 可省略其一val v4 = Array.fill(6)({(Math.random() * 100).toInt})println(v4.mkString(","))// 数组翻转val v5 = v4.reverseprintln(v5.mkString(","))println("---------------------------------------------------------------------")//创建可变数组   是没有默认值的,必须初始化val a1 = new ArrayBuffer[Int]// 0println(a1.length)//a1(0) = 3   报错   0 is out of bounds (min 0, max -1)   数组无元素a1.+=(1)a1 += 1//指定初始长度, 但是也必须先 += 初始化元素 才可以 a2()访问val a2 = new ArrayBuffer[Int](3)val a3 =  ArrayBuffer[Int](3,3,3,3,3,3)println(a1)a1 += 20 +=: a1a1.append(2)a1.prepend(0)println(a1)println(a3)val array1 =  ArrayBuffer(1, 1, 3, 3, 1, 1)array1.insert(1,2)array1.update(0,0)array1.remove(array1.length-1)// 删除第一个3array1 -= 3//ArrayBuffer(0, 2, 1, 3, 1)println(array1)// BufferArray 与 Array 的转换。  .toArray  .toBuffer}
}

练习:猴子报数。15只猴子围成一圈报数,报到数字7的猴子被淘汰,下一只猴子从1重新报数,最后剩余的是哪只猴子?

package com.fesco.arrayobject MonkeyExec {def main(args: Array[String]): Unit = {// 定义数组,表示15只猴子// 用true表示猴子的还活着,用false表示猴子被淘汰val monkeys = Array.fill(15)(true)// 定义变量来记录还剩余的猴子数量var n = 15// 定义变量来记录报数var i = 1// 定义变量来记录下标var index = 0// 只要剩余的猴子数量>1那么就需要继续报数while (n > 1) {// 先判断这只猴子是否存活if (monkeys(index)) {// 判断这只猴子是否会被淘汰if (i == 7) {// 这只猴子被淘汰monkeys(index) = false// 剩余猴子数量-1n -= 1// 下一只猴子重新报数i = 0}// 报数+1i += 1}// 下一只猴子准备index += 1if (index == monkeys.length) index = 0}println(monkeys.mkString(", "))}}

二维数组

// 二维数组中的一维数组的长度可以不一致
val array1 = new Array[Array[Int]](3)
array1(0) = new Array[Int](5)
array1(1) = Array[Int](1, 2, 3, 4, 5)//ofDim 方法可定义一至五维数组
// 二维数组,每个数组长度为5  。  这种方式定义的每个一维数组长度要一致
val array2 = Array.ofDim[Int](2, 5)val array3 = Array(Array(1, 1, 1, 1, 1), Array(1, 1, 1, 1, 1), Array(1, 1, 1, 1, 1), Array(1, 1, 1, 1, 1), Array(1, 1, 1, 1, 1))// 输出的不是1 ,而是 () 。 赋值运算符的返回值是Unit
// println(array3(0)(0) = 1)//    杨辉三角形
//    1
//    1 1
//    1 2 1
//    1 3 3 1
//    1 4 5 4 1val arr = new Array[Array[Int]](5)
// 遍历数组
for (i <- 0 until 5) {// 初始化第i行一维数组arr(i) = new Array[Int](i + 1)// 填充元素for (j <- 0 to i) {// 每一行第一个或者最后一个元素是1if (j == 0 || j == i) arr(i)(j) = 1else arr(i)(j) = arr(i - 1)(j) + arr(i - 1)(j - 1)}println(arr(i).mkString("\t"))
}
http://www.lryc.cn/news/340211.html

相关文章:

  • 【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)
  • 如何利用纯前端技术,实现一个网页版视频编辑器?
  • stm32实现hid键盘
  • 【单例模式】饿汉式、懒汉式、静态内部类--简单例子
  • windows关闭Windows Search功能
  • 政安晨:【深度学习神经网络基础】(九)—— 在深度学习神经网络反向传播训练中理解梯度
  • 免费的 ChatGPT、GPTs、AI绘画(国内版)
  • UniApp 微信小程序:在 onLaunch 中等待异步方法执行完成后,再调用页面中的接口
  • 【招贤纳士】长期有效
  • 华为配置静态ARP示例
  • LRTimelapse for Mac:专业延时摄影视频制作利器
  • Java复习第十九天学习笔记(Cookie、Session登录),附有道云笔记链接
  • HBase的数据模型与架构
  • 卷积神经网络的结构组成与解释(详细介绍)
  • 使用ansible的连通性检查的关键参数
  • Jenkins用maven风格build报错解决过程记录
  • Web3.0与AI的交融:开启智能互联网新时代
  • 自动化_Ansible学习笔记
  • 用于密集视觉冲击的紧凑三维高斯散射Compact 3D Gaussian Splatting For Dense Visual SLAM
  • ChatGPT揭秘:高效论文写作的秘籍
  • 电脑不能上网,宽带调制解调器出现问题如何处理
  • 云计算: OVN 集群 部署分布式交换机
  • electron+Vue3构建桌面应用之IPC通讯
  • html球体涨水
  • ubuntu手动编译opencv 4.9.0遇到的问题汇总
  • SEO之搜索引擎的工作原理(三)
  • 开发语言漫谈-python
  • JVM指令收集
  • 小程序解析二维码:jsQR
  • 【verilog 设计】 reg有没有必要全部赋初值?