scala数组操作解析
scala 数组分位点
Scala 数组分位点1. 介绍在Scala中,数组是一种容器,可以存储相同类型的元素。
数组的长度是固定的,一旦创建后不能改变。
在处理数据时,经常需要对数组进行分析和计算。
数组分位点是一种常见的统计计算方法,用于将数组按照一定比例划分为若干部分。
本文将介绍Scala中如何计算数组的分位点,并提供详细的示例代码和解释。
2. 数组分位点的定义数组的分位点是指将数组按照一定比例划分为若干部分的值。
常见的分位点有四分位点(quartiles)、中位数(median)和十分位数(deciles)等。
•四分位点:将数组分为四个部分,分别是第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和四分位距(IQR)。
•中位数:将数组分为两个部分,中间的值即为中位数。
•十分位数:将数组分为十个部分,分别是第一十分位数、第二十分位数、…、第九十分位数。
3. Scala实现数组分位点Scala提供了丰富的数组操作方法,可以方便地计算数组的分位点。
下面是一个示例代码,演示了如何使用Scala计算数组的四分位点。
import scala.collection.mutable.ArrayBufferdef quartiles(arr: Array[Double]): (Double, Double, Double, Double) = {val sortedArr = arr.sortedval q1 = sortedArr((sortedArr.length - 1) / 4)val q2 = sortedArr((sortedArr.length - 1) / 2)val q3 = sortedArr((sortedArr.length - 1) * 3 / 4)val iqr = q3 - q1(q1, q2, q3, iqr)}val data = Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0)val (q1, q2, q3, iqr) = quartiles(data)println(s"Q1: $q1")println(s"Q2: $q2")println(s"Q3: $q3")println(s"IQR: $iqr")在上述代码中,首先定义了一个名为quartiles的函数,该函数接受一个Array[Double]类型的参数,并返回一个包含四分位点的元组。
scala(4)可变数组和不可变数组
scala(4)可变数组和不可变数组在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)不可变长数组指的是长度不可变,但是数组中⾓标对应的元素的值是可变的可变数组指的是长度和数组中⾓标对应的元素都是可变的。
object ArrayDemo {def main(args: Array[String]): Unit = {/*** 不可变数组⼀旦初始化,数组的长度就是不可变的,不能往数组中添加任* 何元素*/val arr = Array[Int](1, 2, 3, 4, 5)// 如果数组中,有不同类型的元素,那么这个数组的类型就是这些元素的公共⽗类型 Anyval arr1: Array[Any] = Array(1, 2, "leo")// 创建了⼀个数组,给数组的初始化长度为5,每个⾓标的初始长度和泛型的初始值⼀致,也就是 0val arr2 = new Array[Int](5)// 创建⼀个数组,数组的长度是 1 ,数组的元素是 5val arr3 = Array(5)// ++ 运算符合并两个数组,原来的数组并没有改变,只是⽣成了个新的数组。
val arr4 = arr ++ arr2/*** 可变长数组*/val buffer1 = ArrayBuffer[Int]()buffer1 += 1buffer1 ++= arrbuffer1 ++= ArrayBuffer(6, 7, 8) // 添加数组// 更改指定⾓标的值buffer1(1) = 11// append ⽅式添加buffer1.append(12, 13, 14)buffer1 -= 12println(buffer1) // ArrayBuffer(1, 11, 2, 3, 4, 5, 6, 7, 8, 13, 14)// 移除数组如果要移除的元素不存在,不会报错buffer1 --= Array(1, 2, 15)println(buffer1) // ArrayBuffer(11, 3, 4, 5, 6, 7, 8, 13, 14)// 移除指定下表对应的元素buffer1.remove(5)// 从指定⾓标开始移除指定个元素buffer1.remove(3, 2)}}/*** 数组的常⽤⽅法*/val arr = Array(1, 2, 3, 4, 5)// 最⼤值println(arr.max)// 最⼩值println(arr.min)//maString 拼接println(arr.mkString("")) // 12345println(arr.mkString(",")) // 1,2,3,4,5println(arr.mkString("[", ",", "]")) //[1,2,3,4,5]/*** 数组的转换操作*/val intarr = Array(1,2,3,12,5,7)intarr.map((x: Int)=> x * 2).sortBy((x: Int)=> x) //排序.reverse // 将数组反转.foreach((x:Int)=>println(x))intarr.map(_ * 2).sortBy(x =>x).reverse.foreach(println(_))var strarr = Array("hello world","hello china")strarr.map(x => {val fields = x.split(" ")fields}).flatten.foreach(println(_))strarr.flatMap((x: String)=>{x.split(" ")}).foreach(println(_))相关:1、foreachforeach和map相似,只不过它没有返回值,foreach只要是为了对参数进⾏作⽤。
scala array的用法
《深度解析:Scala Array的用法及个人观点》一、引言Scala作为一种多范式编程语言,具有函数式编程和面向对象编程的特点,在数据处理与计算领域具有广泛的应用。
在Scala中,Array作为一种常见的数据结构,被广泛用于存储和操作数据。
本文将深入探讨Scala Array的用法,并结合个人观点进行分析和总结。
二、Scala Array的基本概念在Scala中,Array是一个可变的序列,用于存储相同类型的元素。
与Java中的数组类似,但在Scala中,Array是一个类,而不是一种特殊的数据类型。
我们可以通过以下方式定义一个Array:```scalaval arr: Array[Int] = new Array[Int](5)```上述代码创建了一个包含5个整数的Array。
需要注意的是,数组在创建时需要指定元素的类型,并且数组的长度是不可变的。
三、Scala Array的常用操作1. 访问元素我们可以使用下标访问数组中的元素,下标从0开始。
例如:```scalaval x: Int = arr(2)```上述代码将数组arr的第3个元素赋值给变量x。
2. 更新元素数组的元素可以进行更新操作,例如:```scalaarr(0) = 10```上述代码将数组arr的第一个元素更新为10。
3. 遍历数组遍历数组是常见的操作,可以使用for循环或者foreach方法,例如:```scalafor (i <- arr) {println(i)}```4. 数组转换我们可以使用map、filter等方法对数组进行转换,以及使用其他高阶函数对数组进行操作。
四、Scala Array的深度应用在复杂的应用场景中,我们经常会遇到对数组进行排序、过滤、合并等操作的需求。
Scala提供了丰富的库函数和高阶函数,可以方便地完成这些操作。
对数组进行排序可以使用sortWith方法,对数组进行过滤可以使用filter方法,对数组进行合并可以使用++操作符等。
scala的数组循环
scala的数组循环Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。
在Scala中,数组是一种常用的数据结构,用于存储一组有序的元素。
数组循环是一种常见的操作,可以遍历数组中的每个元素,对其进行特定的处理或计算。
在Scala中,我们可以使用多种方式进行数组循环。
下面将介绍几种常用的数组循环方式,并给出相应的示例代码。
1. for循环:for循环是一种常见的循环方式,可以遍历数组中的每个元素,并执行指定的操作。
在Scala中,for循环的语法如下:```scalafor (element <- array) {// 执行指定的操作}```其中,element是一个临时变量,用于存储数组中的每个元素。
示例代码如下:```scalaval array = Array(1, 2, 3, 4, 5)for (element <- array) {println(element)}```上述代码会依次输出数组中的每个元素。
2. foreach方法:foreach方法是数组类的一个方法,用于对数组中的每个元素进行操作。
在Scala中,可以使用数组的foreach方法实现数组循环。
示例代码如下:```scalaval array = Array(1, 2, 3, 4, 5)array.foreach { element =>// 执行指定的操作println(element)}```上述代码与使用for循环的效果相同,都会输出数组中的每个元素。
3. while循环:while循环是一种常见的循环方式,可以根据指定的条件重复执行某个操作,直到条件不满足为止。
在Scala中,可以使用while循环实现数组循环。
示例代码如下:```scalaval array = Array(1, 2, 3, 4, 5)var i = 0while (i < array.length) {// 执行指定的操作println(array(i))i += 1}```上述代码会依次输出数组中的每个元素,直到数组的末尾。
scala的数组循环
scala的数组循环Scala是一种多范式编程语言,它支持面向对象编程和函数式编程。
在Scala中,数组是一种常见的数据结构,可以用来保存一组相同类型的元素。
在本文中,我们将介绍如何在Scala 中循环遍历数组,并给出一些相关的参考内容。
在Scala中,我们可以使用for循环来遍历数组。
有几种不同的方式可以实现这一点。
下面是一个示例:```val arr = Array(1, 2, 3, 4, 5)// 使用for循环遍历数组for (elem <- arr) {println(elem)}```在上述示例中,我们定义了一个整型的数组`arr`,然后使用`for`循环遍历数组的每个元素,并打印出来。
除了使用`for`循环之外,我们还可以使用`foreach`方法来遍历数组。
`foreach`方法接受一个函数作为参数,在遍历数组的每个元素时调用这个函数。
下面是一个示例:```val arr = Array(1, 2, 3, 4, 5)// 使用foreach方法遍历数组arr.foreach(elem => println(elem))```在上述示例中,我们定义了一个整型的数组`arr`,然后使用`foreach`方法遍历数组的每个元素,并打印出来。
注意,在`foreach`方法中,我们使用了一个匿名函数来打印数组的每个元素。
除了使用`for`循环和`foreach`方法之外,我们还可以使用`while`循环来遍历数组。
下面是一个示例:```val arr = Array(1, 2, 3, 4, 5)// 使用while循环遍历数组var i = 0while (i < arr.length) {println(arr(i))i += 1}```在上述示例中,我们定义了一个整型的数组`arr`,然后使用`while`循环和一个变量`i`来遍历数组的每个元素,并打印出来。
在循环体中,我们首先打印数组的第`i`个元素,然后自增`i`。
Scala数组常用方法
Scala数组常用方法1.创建数组- 使用`Array`关键字和元素来创建数组:```scalaval arr1 = Array(1, 2, 3, 4, 5)```- 使用`new`关键字来创建指定大小的数组:```scalaval arr2 = new Array[Int](5) // 创建一个包含5个整型元素的数组```- 使用`Array.ofDim`方法来创建多维数组:```scalaval arr3 = Array.ofDim[Int](3, 4) // 创建一个3行4列的二维数组```2.访问数组元素```scalaprintln(arr1(0)) // 输出数组arr1中的第一个元素arr1(1) = 10 // 修改数组arr1中的第二个元素```3.遍历数组可以使用`for`循环来遍历数组中的所有元素:```scalafor (elem <- arr1)println(elem)```也可以使用`foreach`方法来遍历数组:```scalaarr1.foreach(println)```4.数组长度可以使用`length`方法来获取数组的长度:```scalaprintln(arr1.length) // 输出数组arr1的长度```5.数组元素求和可以使用`sum`方法来计算数组中所有元素的总和:```scalaprintln(arr1.sum) // 输出数组arr1中所有元素的和```6.数组元素求最大值和最小值可以使用`max`方法和`min`方法来找出数组中的最大值和最小值:```scalaprintln(arr1.max) // 输出数组arr1中的最大值println(arr1.min) // 输出数组arr1中的最小值```7.数组元素排序可以使用`sorted`方法对数组中的元素进行排序:```scalaval sortedArr = arr1.sorted // 返回一个新数组,元素按升序排序```8.数组元素过滤可以使用`filter`方法来过滤数组中的元素,只保留符合条件的元素:```scalaval filteredArr = arr1.filter(_ % 2 == 0) // 返回一个新数组,只包含arr1中的偶数元素```9.数组元素映射可以使用`map`方法将数组中的元素通过一个函数映射为新的元素:```scalaval mappedArr = arr1.map(_ * 2) // 返回一个新数组,每个元素都乘以2```10.数组元素合并可以使用`++`运算符将两个数组合并为一个新数组:```scalaval mergedArr = arr1 ++ arr2 // 返回一个新数组,包含arr1和arr2中的所有元素```11.数组元素去重可以使用`distinct`方法去掉数组中的重复元素,返回一个新的数组:```scalaval distinctArr = arr1.distinct // 返回一个新数组,删除arr1中的重复元素12.数组元素转换为字符串可以使用`mkString`方法将数组中的元素转换为一个字符串:```scalaval str = arr1.mkString(", ") // 将数组arr1中的元素用逗号和空格分隔```13.数组元素反转可以使用`reverse`方法将数组中的元素反转:```scalaval reversedArr = arr1.reverse // 返回一个新数组,按相反的顺序排列arr1的元素```14.二维数组操作二维数组可以通过指定多个索引来访问和修改元素:```scalaval arr = Array.ofDim[Int](3, 4)arr(1)(2) = 10 // 修改二维数组arr的第2行第3列元素的值println(arr(1)(2)) // 输出二维数组arr的第2行第3列元素的值以上介绍了Scala中一些常用的数组操作方法,可以根据业务需求选择适当的方法来处理数组。
scala数组排序方法
scala数组排序方法Scala是一种功能强大的编程语言,它提供了许多方便的数组排序方法。
在这篇文章中,我们将介绍一些常用的数组排序方法,并提供相应的示例代码。
1. 冒泡排序(Bubble Sort)冒泡排序是一种简单但低效的排序算法。
它通过重复遍历数组,将相邻的元素两两比较,如果顺序不对则交换它们的位置,直到整个数组排序完成。
下面是一个使用冒泡排序方法对数组进行排序的示例代码:```scaladef bubbleSort(arr: Array[Int]): Array[Int] = {val n = arr.lengthfor (i <- 0 until n-1) {for (j <- 0 until n-i-1) {if (arr(j) > arr(j+1)) {val temp = arr(j)arr(j) = arr(j+1)arr(j+1) = temp}}}}```2. 快速排序(Quick Sort)快速排序是一种高效的排序算法,它通过选择一个基准元素,将数组分割成两个子数组,其中一个子数组的所有元素都比基准元素小,另一个子数组的所有元素都比基准元素大。
然后递归地对两个子数组进行排序,最终得到一个有序数组。
下面是一个使用快速排序方法对数组进行排序的示例代码:```scaladef quickSort(arr: Array[Int]): Array[Int] = {if (arr.length <= 1) arrelse {val pivot = arr(arr.length / 2)Array.concat(quickSort(arr.filter(_ < pivot)),arr.filter(_ == pivot),quickSort(arr.filter(_ > pivot)))}}3. 归并排序(Merge Sort)归并排序是一种稳定的排序算法,它将数组分成两个子数组,分别对这两个子数组进行排序,然后再将排序好的两个子数组合并成一个有序数组。
scala的数组循环
scala的数组循环在Scala中,有多种方式来循环遍历数组。
在本文中,我们将介绍常用的四种数组循环方式:for循环、foreach方法、while 循环和递归。
1. 使用for循环使用for循环是最常见的数组遍历方式之一。
通过for循环,我们可以指定循环的范围,并使用数组索引来访问每个元素。
```scalaval arr = Array(1, 2, 3, 4, 5)for (i <- 0 until arr.length) {println(arr(i))}```在上述代码中,我们使用`0 until arr.length`来指定了循环的范围。
`0 until arr.length`表示从0到`arr.length-1`的整数范围。
在每次循环中,我们通过数组索引`i`来访问数组元素,并将其打印出来。
2. 使用foreach方法除了使用for循环外,我们还可以使用数组的`foreach`方法来遍历数组元素。
```scalaval arr = Array(1, 2, 3, 4, 5)arr.foreach { element =>println(element)}```在上述代码中,我们将数组的`foreach`方法应用于数组`arr`并传递一个匿名函数作为参数。
匿名函数接受一个数组元素作为参数,并在每次循环中打印出该元素。
3. 使用while循环Scala也支持使用while循环来遍历数组。
我们可以使用一个变量来表示数组的当前索引,并在每次循环中递增这个索引来获取下一个元素。
```scalaval arr = Array(1, 2, 3, 4, 5)var i = 0while (i < arr.length) {println(arr(i))i += 1}```在上述代码中,我们初始化变量`i`为0,并在每次循环中打印出`arr(i)`,然后递增`i`。
循环将一直执行,直到`i`不再小于`arr.length`为止。
Scala数组操作之Array、ArrayBuffer以及遍历数组
Scala数组操作之Array、ArrayBuffer以及遍历数组ArrayBuffer在Scala中,如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使⽤ArrayBuffer。
// 如果不想每次都使⽤全限定名,则可以预先导⼊ArrayBuffer类import scala.collection.mutable.ArrayBuffer// 使⽤ArrayBuffer()的⽅式可以创建⼀个空的ArrayBufferval b = ArrayBuffer[Int]()// 使⽤+=操作符,可以添加⼀个元素,或者多个元素// 这个语法必须要谨记在⼼!因为spark源码⾥⼤量使⽤了这种集合操作语法!b += 1b += (2, 3, 4, 5)// 使⽤++=操作符,可以添加其他集合中的所有元素b ++= Array(6, 7, 8, 9, 10)// 使⽤trimEnd()函数,可以从尾部截断指定个数的元素b.trimEnd(5)// 使⽤insert()函数可以在指定位置插⼊元素// 但是这种操作效率很低,因为需要移动指定位置后的所有元素b.insert(5, 6)b.insert(6, 7, 8, 9, 10)// 使⽤remove()函数可以移除指定位置的元素b.remove(1)b.remove(1, 3)// Array与ArrayBuffer可以互相进⾏转换b.toArraya.toBuffer遍历Array和ArrayBuffer// 使⽤for循环和until遍历Array / ArrayBuffer// 使until是RichInt提供的函数for (i <- 0 until b.length)println(b(i))// 跳跃遍历Array / ArrayBufferfor(i <- 0 until (b.length, 2))println(b(i))// 从尾部遍历Array / ArrayBufferfor(i <- (0 until b.length).reverse)println(b(i))// 使⽤“增强for循环”遍历Array / ArrayBuffer for (e <- b)println(e)数组常见操作// 数组元素求和val a = Array(1, 2, 3, 4, 5)val sum = a.sum// 获取数组最⼤值val max = a.max// 对数组进⾏排序scala.util.Sorting.quickSort(a)// 获取数组中所有元素内容a.mkStringa.mkString(", ")a.mkString("<", ",", ">")// toString函数a.toStringb.toString。
scala 数组的实例
scala 数组的实例Scala是一种强大的编程语言,它结合了面向对象编程和函数式编程的特点。
在Scala中,数组是一种常见的数据结构,可以用于存储一组元素。
本文将介绍Scala数组的实例,包括数组的创建、访问和操作等内容。
在Scala中,可以使用Array类来创建数组。
下面是一个示例代码:```scalaval arr: Array[Int] = new Array[Int](5)```上述代码创建了一个包含5个整数的数组。
要注意的是,数组的大小在创建时需要指定,并且数组的索引从0开始。
在上述代码中,变量`arr`的类型为`Array[Int]`,即整数类型的数组。
要访问数组中的元素,可以使用索引。
例如,要访问数组中的第一个元素,可以使用`arr(0)`的方式:```scalaval firstElement: Int = arr(0)```在上述代码中,将数组`arr`的第一个元素赋值给变量`firstElement`。
除了使用索引访问数组元素,Scala还提供了一些方便的方法来操作数组。
例如,可以使用`length`方法获取数组的长度:```scalaval length: Int = arr.length```上述代码将数组`arr`的长度赋值给变量`length`。
还可以使用`foreach`方法对数组进行遍历操作。
例如,下面的代码将数组中的每个元素乘以2,并打印结果:```scalaarr.foreach(element => println(element * 2))```上述代码使用了Lambda表达式,将数组的每个元素赋值给变量`element`,然后将其乘以2并打印出来。
除了以上介绍的基本操作外,Scala还提供了许多其他方法来操作数组。
例如,可以使用`filter`方法过滤数组中的元素,使用`map`方法对数组中的每个元素进行映射操作,使用`reduce`方法对数组中的元素进行累积操作等等。
scala数组排序方法
scala数组排序方法Scala是一种多范式编程语言,它结合了面向对象编程和函数式编程的特性。
在Scala中,数组是一种常见的数据结构,用于存储一组有序的元素。
在实际开发中,我们经常需要对数组进行排序操作,以便更好地处理和分析数据。
本文将介绍Scala中常用的数组排序方法,并对其使用进行详细说明。
一、冒泡排序冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数组,每次比较相邻的两个元素,并按照规定的顺序交换它们。
通过多次遍历,将最大(或最小)的元素逐渐交换到数组的末尾,从而实现排序的目的。
在Scala中,可以使用循环嵌套和条件判断来实现冒泡排序。
二、选择排序选择排序是一种简单直观的排序算法,它也是一种不稳定的排序算法。
选择排序的基本思想是每次从待排序的元素中选出最小(或最大)的元素,将其放到已排序的序列的末尾。
通过多次遍历,不断缩小未排序序列的范围,最终实现排序的目的。
在Scala中,可以使用循环嵌套和条件判断来实现选择排序。
三、插入排序插入排序是一种简单直观的排序算法,它也是一种稳定的排序算法。
插入排序的基本思想是将待排序的元素逐个插入到已排序序列中的适当位置,从而形成一个新的有序序列。
在Scala中,可以使用循环和条件判断来实现插入排序。
四、快速排序快速排序是一种高效的排序算法,它是一种不稳定的排序算法。
快速排序的基本思想是通过一趟排序将待排序的数组分割成两个独立的部分,其中一部分的所有元素都比另一部分的所有元素小。
然后对这两部分继续进行排序,直到整个数组有序。
在Scala中,可以使用递归和条件判断来实现快速排序。
五、归并排序归并排序是一种高效的排序算法,它是一种稳定的排序算法。
归并排序的基本思想是将待排序的数组分成两个长度相等(或相差1)的子数组,对这两个子数组分别进行排序,然后将排序好的子数组合并成一个有序数组。
通过递归调用,最终实现整个数组的排序。
在Scala中,可以使用递归和条件判断来实现归并排序。
scala的数组循环
Scala的数组循环介绍在Scala编程语言中,数组是一种常用的数据结构,用于存储和处理一组相同类型的元素。
数组循环是指对数组中的每个元素进行遍历和操作的过程。
本文将详细介绍Scala中的数组循环的各种用法和技巧。
一维数组循环一维数组是最简单和常见的数组类型,它由一组相同类型的元素组成,可以通过索引访问和操作其中的元素。
在Scala中,我们可以使用多种方式来进行一维数组的循环。
for循环for循环是一种常见的遍历数组的方法,它可以按照指定的顺序依次访问数组中的每个元素。
在Scala中,for循环可以使用以下方式来遍历一维数组:val arr = Array(1, 2, 3, 4, 5)for (elem <- arr) {println(elem)}foreach方法除了使用for循环外,我们还可以使用数组的foreach方法来遍历数组。
foreach 方法接受一个函数作为参数,该函数会被应用到数组的每个元素上。
以下是使用foreach方法遍历一维数组的示例:val arr = Array(1, 2, 3, 4, 5)arr.foreach(elem => println(elem))迭代器迭代器是一种用于遍历集合的对象,它提供了一种逐个访问集合元素的方式。
在Scala中,数组也可以通过迭代器进行循环遍历。
以下是使用迭代器遍历一维数组的示例:val arr = Array(1, 2, 3, 4, 5)val iter = arr.iteratorwhile (iter.hasNext) {val elem = iter.next()println(elem)}二维数组循环除了一维数组,Scala还支持多维数组,其中最常见的是二维数组。
二维数组是由多个一维数组组成的数组,可以通过多个索引来访问和操作其中的元素。
在Scala 中,我们可以使用多种方式来进行二维数组的循环。
嵌套循环最简单的方式是使用嵌套循环来遍历二维数组。
小记--------scala-数组操作之Array、ArrayBuffer以及遍历数组
⼩记--------scala-数组操作之Array、ArrayBuffer以及遍历数组1.Array在scala中,Array代表的含义与java中类似,也是长度不可改变的数组。
此外,由于scala与java都是运⾏在JVM中,双⽅可以相互调⽤,因此Scala数组的底层实际上是Java数组。
例如字符串数组在底层就是Java的String[] ,整数数组在底层就是Java的Int[].在创建数组的时候,数据都是有值的,只是都是默认值 Int 是0 。
1.1 通过索引值进⾏Array赋值语法:数组名(索引) = 值1.2通过索引值取值语法:数组名(索引)注意: Array的长度是不可变的,在创建的时候就已经固定好长度。
2.ArrayBuffer在scala中,如果需要长度可变的数组类就可以使⽤ArrayBuffer但是如果想使⽤ArrayBuffer的话,需要⾸先导⼊包:import scala.collection.mutable.ArrayBuffer2.1 ArrayBuffer添加元素语法:ArrayBuffer名 += 值(添加单个值)⼀次性添加多个值语法:ArrayBuffer名 += (值,值,值)加⼊其它的ArrayBuffer语法:ArrayBuffer名 ++= 其它ArrayBuffer名删除多个元素使⽤语法:数组名 .trimEnd(个数) 从尾部开始数个数在指定位置插⼊⼀个元素语法:数组名.insert(5,6) 5表⽰在索引位置为5 插⼊⼀个元素 6 插⼊单个元素插⼊多个元素语法:数组名.insert(3,3,2,1) 第⼀个参数为插⼊位置,之后的参数为插⼊的值在指定位置移除元素语法:数组名.remove(1,2) 从索引为1的位置移除2个元素(包含索引为1的元素)3.Array和ArrayBuffer的相互转换语法:数组名.toArray 数组名.toBuffer4.遍历Array和ArrayBuffer4.1 普通遍历4.2跳跃遍历(2,4,6...)4.3 从尾部开始遍历反转语法: (0 until 数组名.length).reverse 反转4.4增强for循环遍历语法: for ( i <- 数组名)5.数组常见的操作5.1数组元素求和语法:数组名.sum5.2 获取数组最⼤值语法:数组名.max5.3对数组进⾏排序语法:scala.util.Sorting.quickSort(数组名)5.4获取数组中所有元素内容语法:数组名.mkString5.5数组转换 yield使⽤yield和函数式编程转换数组(通过yield构建⼀个新的数组)案例:将数组a 的值的平⽅赋值给a2注意:通过yield转换的数组,本⾝数组是什么类型那么转换好的数组也是什么类型。
Scala详解
Scala详解分号表⽰语句的结束;如果⼀⾏只有⼀条语句时,可以省略,多条时,需要分隔⼀般⼀⾏结束时,表⽰表达式结束,除⾮推断该表达式未结束:// 末尾的等号表明下⼀⾏还有未结束的代码.def equalsign(s: String)=println("equalsign: " + s)// 末尾的花括号表明下⼀⾏还有未结束的代码.def equalsign2(s: String) = {println("equalsign2: " + s)}//末尾的逗号、句号和操作符都可以表明,下⼀⾏还有未结束的代码.def commas(s1: String,s2: String) = Console.println("comma: " + s1 +", " + s2)多个表达式在同⼀⾏时,需要使⽤分号分隔常量定义的引⽤不可变,不能再指向别的对象,相当于Java中的finalScala中⼀切皆对象,所以,定义⼀切都是引⽤(包括定义的基本类型变量,实质上是对象)val定义的引⽤不可变,指不能再指向其他变量,但指向的内容是可以变的:val定义的常量必须要初始化val的特性能并发或分布式编程很有好处变量定义的引⽤可以再次改变(内容就更可以修改了),但定义时也需要初始化在Java中有原⽣类型(基础类型),即char、byte、short、int、long、float、double和boolean,这些都有相应的Scala类型(没有基本类型,但好⽐Java中相应的包装类型),Scala编译成字节码时将这些类型尽可能地转为Java中的原⽣类型,使你可以得到原⽣类型的运⾏效率⽤val和var声明变量时必须初始化,但这两个关键字均可以⽤在构造函数的参数中,这时变量是该类的⼀个属性,因此显然不必在声明时进⾏初始化。
此时如果⽤val声明,该属性是不可变的;如果⽤var声明,则该属性是可变的:class Person(val name: String, var age: Int)即姓名不可变,但年龄是变化的val p = new Person("Dean Wampler", 29)var和val关键字只标识引⽤本⾝是否可以指向另⼀个不同的对象,它们并未表明其所引⽤的对象内容是否可变定义时可以省略类型,会根据值来推导出类型scala> var str = "hello"str: String = helloscala> var int = 1int: Int = 1定义时也可明确指定类型:scala> var str2:String = "2"str2: String = 2以前传统Java都是指令式编程风格,如果代码根本就没有var,即仅含有val,那它或许是函数式编程风格,因此向函数式风格转变的⽅式之⼀,多使⽤val,尝试不⽤任何var编程指令式编程风格:def printArgs(args: Array[String]): Unit = {var i = 0while (i<args.length) {println(args(i))i += 1}}函数式编程风格:def printArgs(args: Array[String]): Unit = {for (arg <- args)println(arg)}或者:def printArgs(args: Array[String]): Unit = {//如果函数字⾯量只有⼀⾏语句并且只带⼀个参数,//则么甚⾄连指代参数都不需要args.foreach(println)}1.3Range数据范围、序列⽀持Range的类型包括Int、Long、Float、Double、Char、BigInt和BigDecimalRange可以包含区间上限,也可以不包含区间上限;步长默认为1,也可以指定⼀个⾮1的步长:函数是⼀种具有返回值(包括空Unit类型)的⽅法函数体中最后⼀条语句即为返回值。
scala jdbc resultset 数组
Scala JDBC ResultSet 数组1. 介绍Scala是一种流行的多范式编程语言,它具有面向对象和函数式编程的特性。
Scala允许开发人员轻松地访问数据库,并使用JDBC连接进行数据库操作。
本文将重点介绍Scala中使用JDBC ResultSet数组的方法。
2. JDBC简介Java数据库连接(JDBC)是Java语言中用于与数据库进行交互的API。
它允许开发人员编写与数据库通信的代码,以便执行查询、更新和管理数据库中的数据。
Scala具有与Java兼容的特性,因此可以直接使用JDBC来连接和操作数据库。
3. ResultSet简介ResultSet是JDBC中用于存储从数据库中检索的数据的对象。
当执行SQL查询时,ResultSet会将查询结果存储在内存中,开发人员可以通过ResultSet对象访问和操作这些数据。
在Scala中,开发人员可以使用ResultSet对象来处理数据库查询的结果集。
4. ResultSet数组在Scala中,开发人员可以使用ResultSet数组来存储和操作从数据库中检索的数据。
ResultSet数组是一个二维数组,它可以存储多行多列的数据。
开发人员可以使用ResultSet数组来处理复杂的查询结果,并对数据进行分析和处理。
5. 创建ResultSet数组在Scala中,创建ResultSet数组需要使用JDBC的ResultSet对象和Scala的数组。
开发人员需要使用JDBC来执行数据库查询并获取ResultSet对象。
开发人员可以将ResultSet对象中的数据存储到Scala的数组中。
```scalaimport java.sql.{Connection, DriverManager}object ResultSetArrayExample {def m本人n(args: Array[String]): Unit = {val url = "jdbc:mysql://localhost:3306/test"val driver = .mysql.cj.jdbc.Driver"val username = "root"val password = "password"Class.forName(driver)val connection: Connection =DriverManager.getConnection(url, username, password)val statement = connection.createStatement()val resultSet = statement.executeQuery("SELECT * FROM products")val resultSetArray = resultSetToArray(resultSet)resultSetArray.foreach(row => {println(row.mkString(", "))})connection.close()}def resultSetToArray(resultSet: java.sql.ResultSet):Array[Array[Any]] = {val metaData = resultSet.getMetaDataval columns = metaData.getColumnCountval results = scala.collection.mutable.ArrayBuffer[Array[Any]]()while (resultSet.next()) {val row = new Array[Any](columns)for (i <- 1 to columns) {row(i - 1) = resultSet.getObject(i)}results += row}results.toArray}}```上述代码演示了如何使用Scala中的JDBC和数组来创建ResultSet 数组。
scala jdbc resultset 数组 -回复
scala jdbc resultset 数组-回复Scala JDBC ResultSet 数组详解在Scala中,JDBC(Java Database Connectivity)是用于连接数据库的一种标准的API。
它允许开发者通过编程方式与数据库进行交互和操作。
在进行数据库查询操作时,通常会用到ResultSet,它是存储查询结果的对象。
本文将介绍如何使用Scala JDBC ResultSet数组,并提供一步一步的回答。
第一步:导入依赖在使用Scala JDBC ResultSet数组之前,我们需要首先导入相应的依赖。
在Scala项目中,我们可以使用sbt构建工具来管理我们的依赖关系。
我们可以在项目的build.sbt文件中添加以下依赖:libraryDependencies += "mysql" "mysql-connector-java""8.0.26"libraryDependencies += "org.scala-lang.modules""scala-parser-combinators" "1.1.2"以上依赖包括了MySQL数据库的驱动和Scala解析组合器。
对于其他数据库,你可以根据需要添加相应的驱动依赖。
第二步:连接数据库接下来,我们需要建立与数据库的连接。
可以使用以下代码来建立与MySQL数据库的连接:scalaimport java.sql.{Connection, DriverManager}val url = "jdbc:mysql:localhost:3306/mydatabase"val user = "root"val password = "password"val connection: Connection = DriverManager.getConnection(url, user, password)上述代码中的url指定了数据库连接的地址,user和password分别是数据库的用户名和密码。
【scala】数组和列表
【scala】数组和列表⼀、数组Array1.创建数组 隐式:val greetStrings = new Array[String](3); 显式:val greetStrings : Array[String] = new Arrray[String](3);2.赋值 (1)greetStrings(0) = "hello"; greetStrings(1) = ","; greetStrings(2) = "world\n"; //注意,后边是括号(),并不是[ ] (2)val greetStrings = Array("hello",",","world\n");//编译器会推断出数组的类型为Array[String],同样后边是()并不是[ ] (3)greetStings.update(0,"Hello");//改变0位置的元素3.遍历 for(i <- 0 until greetStrings.length) println(i + ":" + greetingString(i));4.多维数组var myMatrix = ofDim[Int](3,3) //创建⼀个3x3的Int类型的多维数组for (i <- 0 to 2;j <- 0 to 2) {myMatrix(i)(j) = 1; //可以通过matrix(i)(j)来访问数组print(myMatrix(i)(j));} 5.⼀些常⽤⽅法1def apply( x: T, xs: T* ): Array[T]创建指定对象 T 的数组, T 的值可以是 Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean。
Scala数组和集合
Scala数组和集合⼀、scala数组数组定义1: var arr = new Array[String](3)String:存储的元素类型3:存储3个元素添加元素: arr(1) = "hello"数组定义2: val arr1 = Array[Int](1,2,3,4,5,6)改变内容:arr1(1) = 18添加元素:arr1 += 22 长度不可以改变⼆、数组⽅法1、map(映射)映射: 2 4 6映射关系:f(x) = x*5对应映射关系:10 20 30例:scala> var arr = Array(1,2,3)arr: Array[Int] = Array(1, 2, 3)scala> arr.map((x: Int) => x * 10)res12: Array[Int] = Array(10, 20, 30)scala> arrres13: Array[Int] = Array(1, 2, 3)scala> res12res14: Array[Int] = Array(10, 20, 30)2、flatten(扁平化操作)scala> var arr = Array("hello Beijing","hello China")arr: Array[String] = Array(hello Beijing, hello China)scala> arr.lengthres6: Int = 2scala> arr.map(_.split(" "))res7: Array[Array[String]] = Array(Array(hello, Beijing), Array(hello, China))scala> arr.map(_.split(" ")).flattenres8: Array[String] = Array(hello, Beijing, hello, China)3、flatMap(相当于先map操作再flatten)scala> arrres9: Array[String] = Array(hello Beijing, hello China)scala> arr.flatMap(_.split(" "))res10: Array[String] = Array(hello, Beijing, hello, China)4、foreach(遍历数组中的元素)scala> res10.foreach(x => println(x))helloBeijinghelloChinascala>5、GroupBy(分组)scala> arrres13: Array[String] = Array(hello Beijing, hello China)scala> arr.flatMap(_.split(" ")).groupBy(x => x)res14: scala.collection.immutable.Map[String,Array[String]] = Map(Beijing -> Array(Beijing), China -> Array(China), hello -> Array(hello, hello)) //Scala简易WordCountscala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length))res16: scala.collection.immutable.Map[String,Int] = Map(Beijing -> 1, China -> 1, hello -> 2)6、sortBy(排序)scala> arrres13: Array[String] = Array(hello Beijing, hello China)//正序scala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length)).toList.sortBy(x => x._2) res18: List[(String, Int)] = List((Beijing,1), (China,1), (hello,2))//倒序scala> arr.flatMap(_.split(" ")).groupBy(x => x).map(x => (x._1,x._2.length)).toList.sortBy(x => -x._2) res19: List[(String, Int)] = List((hello,2), (Beijing,1), (China,1))三、集合scala集合有两种类型:可变mutable不可变Immutableval b = List(2,4,6)不可变集合:内容不可变(数组内容可改变)长度不可变可变集合:注意:需要导包import scala.collection.mutable._val buff = ArrayBuffer(2,3,4)内容可变: buff(1) = 300长度可变:buff += 200例:scala> val s = List(1,2,3)s: List[Int] = List(1, 2, 3)scala> s(1) = 8<console>:13: error: value update is not a member of List[Int]s(1) = 8^scala> val b = List(2,3,4)b: List[Int] = List(2, 3, 4)scala> b += 20<console>:13: error: value += is not a member of List[Int]b += 20^scala> import scala.collection.mutable._import scala.collection.mutable._scala> val buff = ArrayBuffer(2,3,4)buff: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 3, 4)scala> buff += 200res23: buff.type = ArrayBuffer(2, 3, 4, 200)scala> buff(1) = 300scala> buffres25: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 300, 4, 200)scala> scala.collection.mutable.AVLIterator History PriorityQueueProxyAVLTree ImmutableMapAdaptor PublisherAbstractBuffer ImmutableSetAdaptor QueueAbstractIterable IndexedSeq QueueProxyAbstractMap IndexedSeqLike ResizableArrayAbstractSeq IndexedSeqOptimized RevertibleHistoryAbstractSet IndexedSeqView SeqAnyRefMap Iterable SeqLikeArrayBuffer LazyBuilder SetArrayBuilder Leaf SetBuilderArrayLike LinearSeq SetLikeArrayOps LinkedEntry SetProxyArraySeq LinkedHashMap SortedSetArrayStack LinkedHashSet StackBitSet LinkedList StackProxyBuffer LinkedListLike StringBuilderBufferLike ListBuffer SubscriberBufferProxy ListMap SynchronizedBufferBuilder LongMap SynchronizedMapCloneable Map SynchronizedPriorityQueueDefaultEntry MapBuilder SynchronizedQueueDefaultMapModel MapLike SynchronizedSetDoubleLinkedList MapProxy SynchronizedStackDoubleLinkedListLike MultiMap TraversableFlatHashTable MutableList TreeSetGrowingBuilder ObservableBuffer UndoableHashEntry ObservableMap UnrolledBufferHashMap ObservableSet WeakHashMapHashSet OpenHashMap WrappedArrayHashTable PriorityQueue WrappedArrayBuilderscala> val lb = scala.collection.mutable.ListBuffer(11,22,33)lb: scala.collection.mutable.ListBuffer[Int] = ListBuffer(11, 22, 33) scala> lb(1) = 334scala> lb += 222res27: lb.type = ListBuffer(11, 334, 33, 222)scala> lbres28: scala.collection.mutable.ListBuffer[Int] = ListBuffer(11, 334, 33, 222)四、长度可变的数组创建长度可变数组:val ab = scala.collection.mutable.ArrayBuffer(2,3,4)长度可变:ab += 440五、Seq序列不可变的序列在scala中列表要么为空(Nil表⽰空列表)head元素上加上⼀个tail列表head:取头元素tail:取尾元素(除了头全是尾)5::Nil 空列表的头加⼊⼀个元素1::2::3::Nil 空列表前加⼊三个元素1,2,3+ 字符串的拼接++ 两个集合相加++: 合并集合.+: 头部追加元素:+ 尾部追加元素::: 两个集合相加count 统计个数filter 过滤sortBy 排序sortWwith 排序grouped 分组fold 折叠foldLeft 左折叠foldRight 右折叠reduce 聚合aggregate 先局部聚合再全局聚合zip 拉链sum 求和例:scala> import scala.collection.immutable._import scala.collection.immutable._scala> Nilres30: scala.collection.immutable.Nil.type = List()scala> val l = List(2,1,5,8,9)l: List[Int] = List(2, 1, 5, 8, 9)scala> l.headres31: Int = 2scala> l.tailres32: List[Int] = List(1, 5, 8, 9)scala> 5::Nilres33: List[Int] = List(5)scala> val s = Nils: scala.collection.immutable.Nil.type = List()scala> 3::sres34: List[Int] = List(3)scala> sres35: scala.collection.immutable.Nil.type = List()scala> res34res36: List[Int] = List(3)scala> 1::2::3::Nilres37: List[Int] = List(1, 2, 3)scala> val ll = List(3,4,5)ll: List[Int] = List(3, 4, 5)scala> ll + "a"res38: String = List(3, 4, 5)ascala> llres39: List[Int] = List(3, 4, 5)scala> ll ++ List(6,7)res40: List[Int] = List(3, 4, 5, 6, 7)scala> ll ++:List(6,7,8)res41: List[Int] = List(3, 4, 5, 6, 7, 8)scala> llres42: List[Int] = List(3, 4, 5)scala> ll.+:(55)res43: List[Int] = List(55, 3, 4, 5)scala> ll:+(66)res44: List[Int] = List(3, 4, 5, 66)scala> llres45: List[Int] = List(3, 4, 5)scala> val lll = List(33,44)lll: List[Int] = List(33, 44)scala> ll::lllres46: List[Any] = List(List(3, 4, 5), 33, 44) scala> ll:::lllres47: List[Int] = List(3, 4, 5, 33, 44)scala> llres48: List[Int] = List(3, 4, 5)scala> ll.count(x => x>4)res49: Int = 1scala> ll.count(x => x>=4)res50: Int = 2scala> ll.filter(x => x >+5)<console>:19: error: value >+ is not a member of Int ll.filter(x => x >+5)^scala> ll.filter(x => x >=5)res52: List[Int] = List(5)scala> ll.filter(x => x >= 5)res53: List[Int] = List(5)scala> val ls = List(6,2,1,3,8,7)ls: List[Int] = List(6, 2, 1, 3, 8, 7)scala> ls.sortBy(x => x)res54: List[Int] = List(1, 2, 3, 6, 7, 8)scala> ls.sortBy(x => -x)res55: List[Int] = List(8, 7, 6, 3, 2, 1)scala> lsres56: List[Int] = List(6, 2, 1, 3, 8, 7)scala> val sw = List(("h",2),("r",1),("m",4))sw: List[(String, Int)] = List((h,2), (r,1), (m,4)) scala> sw.sortBy(x => x._2)res57: List[(String, Int)] = List((r,1), (h,2), (m,4)) scala> sw.sortWith((x,y) => x._2 > y._2)res58: List[(String, Int)] = List((m,4), (h,2), (r,1)) scala> val sw = List(("h",2),("r",2),("m",4))sw: List[(String, Int)] = List((h,2), (r,2), (m,4))scala> sw.groupd(2)<console>:19: error: value groupd is not a member of List[(String, Int)]sw.groupd(2)^scala> sw.grouped(2)res60: Iterator[List[(String, Int)]] = non-empty iteratorscala> sw.grouped(2).toListres61: List[List[(String, Int)]] = List(List((h,2), (r,2)), List((m,4)))scala> val l2 = List(1,3,4)l2: List[Int] = List(1, 3, 4)scala> l2.fold(0)((x,y) => x+y)res62: Int = 8scala> l2.fold(1)((x,y) => x+y)res63: Int = 9scala> l2.fold(2)((x,y) => x+y)res64: Int = 10scala> ls.fold(2)((x,y) => x-y)res65: Int = -25scala> lsres66: List[Int] = List(6, 2, 1, 3, 8, 7)scala> l2.fold((x,y) => x-y)<console>:19: error: missing parameter typel2.fold((x,y) => x-y)^<console>:19: error: missing parameter typel2.fold((x,y) => x-y)^<console>:19: error: missing argument list for method fold in trait TraversableOnce Unapplied methods are only converted to functions when a function type is expected. You can make this conversion explicit by writing `fold _` or `fold(_)(_)` instead of `fold`. l2.fold((x,y) => x-y)^scala> l2.fold(2)((x,y) => x-y)res68: Int = -6scala> l2.fold(2)(_+_)res69: Int = 10scala> l2.foldLeft(2)(_+_)res70: Int = 10scala> l2.foldRight(2)(_+_)res71: Int = 10scala> l2res72: List[Int] = List(1, 3, 4)scala> l2.fold(0)(_ - _)res73: Int = -8scala> l2.foldRight(0)(_ - _)res74: Int = 2scala> l2.foldLeft(0)(_ - _)res75: Int = -8scala> l2res76: List[Int] = List(1, 3, 4)scala> l2.reduce(_+_)res77: Int = 8scala> l2.reduce(_-_)res78: Int = -6scala> l2res79: List[Int] = List(1, 3, 4)scala> l2.aggregate(0)(_+_,_+_)res80: Int = 8scala> val l3 = List(6,7,8)l3: List[Int] = List(6, 7, 8)scala> l2.zip(l3)res81: List[(Int, Int)] = List((1,6), (3,7), (4,8))scala> val l3 = List(6,7,8,9)l3: List[Int] = List(6, 7, 8, 9)scala> l2.zip(l3)res82: List[(Int, Int)] = List((1,6), (3,7), (4,8))scala> l2res83: List[Int] = List(1, 3, 4)scala> l2.sumres84: Int = 8其中scala> l2res73: List[Int] = List(1, 3, 4)//相当于 1-(3-(4-0) 右折叠初始值在右scala> l2.foldRight(0)(_ - _)res74: Int = 2//相当于 (0-1)-3)-4)scala> l2.foldLeft(0)(_ - _)res75: Int = -8六、Set⽆序的,不重复的集合Set不可变的集合val l5 = collection.mutable.HashSet(2,3,4)HashSet可变的集合remove 删除元素-= 删除元素++ 集合相加++= 相加并赋值例:scala> val l4 = List(1,2,2,4)l4: List[Int] = List(1, 2, 2, 4)scala> val s = Set(2,3,4)s: scala.collection.immutable.Set[Int] = Set(2, 3, 4)scala> val s = Set(2,3,3,4)s: scala.collection.immutable.Set[Int] = Set(2, 3, 4)scala> s += 5<console>:19: error: value += is not a member of scala.collection.immutable.Set[Int] s += 5^scala> collection.mutable.HashHashEntry HashMap HashSetscala> val l5 = collection.mutable.HashSet(2,3,4)l5: scala.collection.mutable.HashSet[Int] = Set(2, 3, 4)scala> l5 += 6res86: l5.type = Set(2, 6, 3, 4)scala> l5res87: scala.collection.mutable.HashSet[Int] = Set(2, 6, 3, 4)scala> l5,remove(2)<console>:1: error: ';' expected but ',' found.l5,remove(2)^scala> l5.remove(2)res88: Boolean = truescala> l5res89: scala.collection.mutable.HashSet[Int] = Set(6, 3, 4)scala> l5 -= 3res90: l5.type = Set(6, 4)scala> l4res91: List[Int] = List(1, 2, 2, 4)scala> l5res92: scala.collection.mutable.HashSet[Int] = Set(6, 4)scala> l4 ++ l5res93: List[Int] = List(1, 2, 2, 4, 6, 4)scala> l5 ++= Set(2,7)res94: l5.type = Set(2, 6, 7, 4)七、Map不可变Map:val m = Map[String,Int]("hello"->2,"world"->8)可变Map:getOrElse:如果有值返回值,没有返回默认值例:scala> val m = Map[String,Int]("hello"->2,"Beijing"->8)m: scala.collection.immutable.Map[String,Int] = Map(hello -> 2, Beijing -> 8)scala> m("hello")res95: Int = 2scala> m("hello") = 4<console>:19: error: value update is not a member of scala.collection.immutable.Map[String,Int] m("hello") = 4^scala> val m2 = collection.mutable.HashMap[String,Int]()m2: scala.collection.mutable.HashMap[String,Int] = Map()scala> m2.put("lisi",18)res97: Option[Int] = Nonescala> m2res98: scala.collection.mutable.HashMap[String,Int] = Map(lisi -> 18)scala> m2 += "weight" -> 120res99: m2.type = Map(lisi -> 18, weight -> 120)scala> m2.remove("lisi")res100: Option[Int] = Some(18)scala> m2res101: scala.collection.mutable.HashMap[String,Int] = Map(weight -> 120)scala> m2 -= "weight"res102: m2.type = Map()scala> m2res103: scala.collection.mutable.HashMap[String,Int] = Map()scala> m2 += "weight" -> 120res104: m2.type = Map(weight -> 120)scala> m2.get("weight")res105: Option[Int] = Some(120)scala> m2.getOrElse("zhangsan",18)res106: Int = 18scala> m2res107: scala.collection.mutable.HashMap[String,Int] = Map(weight -> 120)scala> m2 += "zhangsan" -> 28res108: m2.type = Map(zhangsan -> 28, weight -> 120)scala> m2.getOrElse("zhangsan",18)res109: Int = 28⼋、元组tuple元组中可以是任意元素val t = (2,true,"lisi",Unit)取元素:t._1对偶元组:有两个元素的元组例:scala> val t = (2,true,"lisi",Unit)t: (Int, Boolean, String, Unit.type) = (2,true,lisi,object scala.Unit) scala> tres110: (Int, Boolean, String, Unit.type) = (2,true,lisi,object scala.Unit) scala> t._1res111: Int = 2scala> t._3res112: String = lisiscala> val t1 = ("lisi",18)t1: (String, Int) = (lisi,18)scala> t1.swapres113: (Int, String) = (18,lisi)scala> val t3 = Array(("lisi",18),("zhangsan",16))t3: Array[(String, Int)] = Array((lisi,18), (zhangsan,16))//求t3中的年龄的和scala> t3.foldLeft(0)(_+_._2)res114: Int = 34。
Scala学习——数组映射元组
Scala学习——数组映射元组【《快学Scala》笔记】 / / ⼀、数组1、定长数组声明数组的两种形式:声明指定长度的数组 val 数组名= new Array[类型](数组长度)提供数组初始值的数组,⽆需new关键字Scala声明数组时,需要带有Array类名,且使⽤ () 来指明长度或提供初始值序列。
在JVM中,Scala的Array以Java数组的⽅式实现。
如arr在JVM中的类型对应ng.String[],charArr对应char[]。
2、变长数组ArrayBuffer,全称scala.collection.mutable.ArrayBuffer,类似于Java中的ArrayList和C++中的vector,是长度可变数组类型的结构,称为数组缓冲。
通过:val 名 = ArrayBuffer[类型]() 来声明,声明ArrayBuffer时需要指明类型。
通过 += 操作符来添加元素或序列,++= 操作符来拼接数组。
【在ArrayBuffer的尾端添加或删除元素是⼀个⾼效的操作。
】 ArrayBuffer还⽀持在指定位置插⼊、删除元素。
ArrayBuffer到数组的转换: toArray⽅法3、数组遍历通过for循环来遍历数组指定遍历数组的步长——通过until(上界, 步长)通过reverse函数逆序遍历数组:4、可以通过 for循环+yield 来获得新的数组或ArrayBuffer通过for+yield操作数组或ArrayBuffer之后将得到新的数组或ArrayBuffer。
5、操作数组/数组缓冲常⽤函数求和、求最⼤最⼩值、数组排序。
通过sorted函数对数组或ArrayBuffer排序时,返回的是⼀个新的数组或ArrayBuffer,原有的不变。
可以直接对数组调⽤排序算法,但是不能对ArrayBuffer排序。
quickSort是直接修改原数组,⽽sorted⽅法是返回新数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scala中的数组比java的数组强大很多
1、定长数组:长度不变的数组Array,如:声明一个长度为10的整形数组,val arr = Array[Int](10);声明并初始化一个字符串数组: val arrStr = Array(“wo”,”cha”,”yo”)。
访问数组方式:访问arrStr第一个元素,arrStr(1)即可
2、变长数组(即数组缓冲):java中有ArrayList和scala中的ArrayBuffer等效;但是ArrayBuffer更加强大,通过下面的事列来熟悉ArrayBuffer:
import collection.mutable.ArrayBuffer
val arrbuff1 = ArrayBuffer[Int]()
val arrBuff2 = ArrayBuffer(1,3,4,-1,-4)
arrbuff1 += 23 //用+=在尾端添加元素
arrbuff1 += (2,3,4,32) //同时在尾端添加多个元素
arrbuff1 ++= arrBuff2 //可以用 ++=操作符追加任何集合
arrbuff1 ++= Array(2,43,88,66)
arrbuff1.trimEnd(2) //移除最后的2个元素
arrbuff1.remove(2) //移除arr(2+1)个元素
arrbuff1.remove(2,4) //从第三个元素开始移除4个元素
val arr = arrbuff1.toArray //将数组缓冲转换为Array
val arrbuff2 = arr.toBuffer //将Array转换为数组缓冲
3、遍历数组和数组缓冲:在java中数组和数组列表/向量上语法有些不同。
scala则更加统一,通常情况,我们可以用相同的代码处理这两种数据结构,for(…) yield 循环创建一个类型和原集合类型相同的新集合。
for循环中还可以带守卫:在for中用if来实现。
for(i <- 0 until arrbuff1.length) yield arrbuff1(i) * 2 //将得到ArrayBuffer(2,6,4,-2,-4)
for(i <- 0 until (arrbuff1.length,2)) yield arrbuff1(i) * 2 //将得到ArrayBuffer(12,-4)
for(elem <-0 arrbuff1) print(elem) //如果不需要使用下标,用这种方式最简单了for(i <- arrbuff1 if arrbuff1 > 0) print i //打印出arrbuff1中为整数的值
arrbuff1.filter( _ > 0).map{ 2 * _} //生成arrbuff1中的正数的两倍的新集合
arrbuff1.filter {_ > 0} map {2 * _} //另一种写法
4、常用算法:scala有很多便捷内建函数,如
arrbuff1.sum //对arrbuff1元素求和
Array("asd","sdf","ss").max //求最大元素
arrbuff1.sorted(_ < _) //将arrbuff1元素从小到大排序
arrbuff1.sorted(_ > _) //从大到小排序
util.Sorting.quickSort(Array) //针对数组排序,单不能对数组缓冲排序
val arr = Array(1,23,4,2,45)
arr.mkString(",") //指定分割符
arr.mkString("(",",",")") //指定前缀、分隔符、后缀
更多函数参见Scaladoc
5、多维数组:
val matrix = Array.ofDim[Int](5,4) //三行四列的二维数组
matrix(2)(3) //访问第二行、第三个元素
6、scala数组和java互操作:由于scala数组是用java数组实现的,所以可以在java和
scala之间来回传递,引入scala.collectin.JavaConversion ,可以在代码中使用scala缓冲,在调用java方法时,这些对象会被自动包装成java列表。
反过来讲,引入scala.collection.asScalaBuffer时,当java方法返回java.util.List时,我们可以让它转换成一个Buffer。