Scala数组,定长数组和变长数组,增强for循环,until用法,数组转换,数组常用算法,数组其它操作

2024-04-19 18:32

本文主要是介绍Scala数组,定长数组和变长数组,增强for循环,until用法,数组转换,数组常用算法,数组其它操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 数组

1.1. 定长数组和变长数组

package cn.toto.scala//可变数组的长度时需要引入这个包
import scala.collection.mutable.ArrayBuffer/*** Created by toto on 2017/6/27.*/
object ArrayDemo {def main(args: Array[String]): Unit = {//初始化一个长度为8的定长数组,其所有元素均为0val arr1 = new Array[Int](8)//直接打印定长数组,内容为数组的的hashcode值println(arr1)//将数组转换成数组缓冲,就可以看到原数组中的内容了。//toBuffer会将数组转换成数组缓冲println(arr1.toBuffer)//注意:如果没有new,相当于调用了数组的apply方法,直接为数组赋值//赋初始一个长度为1的定长数组val arr2 = Array[Int](10)println(arr2.toBuffer)//定义一个长度为3的定长数组var arr3 = Array("hadoop","storm","spark")//使用()来访问元素println(arr3(2))//////////////////////////////////////////////////////////////////变长数组(数组缓冲)//如果想使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer包val ab = ArrayBuffer[Int]()//向数组缓冲的尾部追加一个元素//+=尾部追加元素ab += 1println(ab)//追加多个元素ab += (2,3,4,5)println(ab)//追加一个数组++=ab ++= Array(6,7)println(ab)//追加一个数组缓冲ab ++= ArrayBuffer(8,9)//打印数组缓冲abprintln(ab)//在数组某个位置插入元素用inseret,其中第一个参数是其实位置,后面两个参数是要添加进入的值ab.insert(0,-1,0)println(ab)//删除数组某个位置的元素用remove,下面的含义是从0这个位置开始,删除2个元素ab.remove(0,2)println(ab)}
}

运行后的结果如下:

[I@4563e9ab
ArrayBuffer(0, 0, 0, 0, 0, 0, 0, 0)
ArrayBuffer(10)
spark
ArrayBuffer(1)
ArrayBuffer(1, 2, 3, 4, 5)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
ArrayBuffer(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)

1.2. 遍历数组

1.增强for循环
2.好用的until会生成脚标,0 until 10 包含0不包含10
这里写图片描述

package cn.toto.scala/*** Created by toto on 2017/6/28.*/
object ForArrayDemo {def main(args: Array[String]): Unit = {//初始化一个数组val arr = Array(1,2,3,4,4,5,6,7,8)//增强for循环for(i <- arr)print(i + " ")println("")//好用的until会生成一个Range//reverse是将前面生成的Range反转for(i <- (0 until arr.length).reverse)print(arr(i) + " ")}
}

运行后的结果如下:

1 2 3 4 4 5 6 7 8 
8 7 6 5 4 4 3 2 1

1.3. 数组转换

yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变
这里写图片描述

package cn.toto.scala/*** Created by toto on 2017/6/28.*/
object ArrayYieldDemo {def main(args: Array[String]): Unit = {//定义一个数组val arr = Array(1,2,3,4,5,6,7,8,9)//将偶数取出乘以10后再生成一个新的数组val res = for(e <- arr if e % 2 == 1) yield e * 10println(res.toBuffer)//更高级的写法,用着更爽//filter是过滤,接收一个返回值为boolean的函数//map相当于将数组中的每一个元素取出来,应用传进去的函数val r = arr.filter(_ % 2 == 0).map(_ * 10)println(r.toBuffer)}
}

运行后的结果如下:

ArrayBuffer(10, 30, 50, 70, 90)
ArrayBuffer(20, 40, 60, 80)

1.4. 数组常用算法

在Scala中,数组上的某些方法对数组进行相应的操作非常方便!
这里写图片描述
其它数组操作:

scala> var arr = Array(1,6,5,4,7,9,2,25,22,11)
arr: Array[Int] = Array(1, 6, 5, 4, 7, 9, 2, 25, 22, 11)升序排序
scala> arr.sorted
res13: Array[Int] = Array(1, 2, 4, 5, 6, 7, 9, 11, 22, 25)降序
scala> arr.sorted.reverse
res14: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)scala> arr.sortWith(_>_)
res15: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)上面的等价下面的,相当于是降序:
scala> arr.sortWith((x,y) => x > y)
res16: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)下面是升序
scala> arr.sortWith((x,y) => x < y)
res17: Array[Int] = Array(1, 2, 4, 5, 6, 7, 9, 11, 22, 25)scala> val a = Array("hadoop",1.0,2)
a: Array[Any] = Array(hadoop, 1.0, 2)scala> a(1).asInstanceOf[Double]
res20: Double = 1.0scala> val arr1 = new Array[Int](8)
arr1: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0)scala> arr1(1) = 6scala> arr1
res26: Array[Int] = Array(0, 6, 0, 0, 0, 0, 0, 0)定义变长数组,需要引入包:
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBufferscala> val ab = new ArrayBuffer[Int]()
ab: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()scala> ab += 1
res27: ab.type = ArrayBuffer(1)scala> ab
res28: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)scala> ab += 2
res30: ab.type = ArrayBuffer(1, 2)scala> ab += (2,3,4,5)
res31: ab.type = ArrayBuffer(1, 2, 2, 3, 4, 5)scala>

这篇关于Scala数组,定长数组和变长数组,增强for循环,until用法,数组转换,数组常用算法,数组其它操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918271

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字