第1节 Scala基础语法:9、10、数组

mac2022-06-30  71

1. 定义数组时,没有new和有new是有区别的: 

scala> val arr3 = Array[Int](2)    此时,arr3中仅包含1个元素2arr3: Array[Int] = Array(2)

scala> val arr6 =new Array[Int](2)    如果new,相当于调用了数组的apply方法,直接为数组赋值arr6: Array[Int] = Array(0, 0)     此时,指定该数组类型为Int,则arr6中包含2个元素0,0

scala> arr7res519: Array[Nothing] = Array(null, null, null)     此时,未指定数组类型,则其包含3个元素,均为null

 

2. 数组转换:

scala> val f1=(x:Int) => x%2==0        f1: Int => Boolean = <function1> 

scala> arr8.filter(f1)                                               res96: Array[Int] = Array(2, 4, 6, 8) 

scala> arr8.filter((x:Int) => x%2==0)                                res97: Array[Int] = Array(2, 4, 6, 8) 

scala> arr8.filter(x => x%2==0)                                      res99: Array[Int] = Array(2, 4, 6, 8)

scala> arr8.filter(_ %2==0)                                          res100: Array[Int] = Array(2, 4, 6, 8)

 

scala> val f2=(x:Int) => x*10                                        f2: Int => Int = <function1> 

scala> arr8.filter(_ %2==0).map(f2)                                  res104: Array[Int] = Array(2, 4, 6, 8)  

scala> arr8.filter(_ %2==0).map(_ * 10)                              res106: Array[Int] = Array(20, 40, 60, 80)  

 

======================================================

5.    数组、映射、元组、集合

5.1.   数组

5.1.1.    定长数组和变长数组

(1)定长数组定义格式:

 val arr=new Array[T](数组长度)

val arr=Array(1,2,3,4,5)

 

(2)变长数组定义格式:

 valarr = ArrayBuffer[T]()

 

注意需要导包:import scala.collection.mutable.ArrayBuffer

 

package cn.itcast.scalaimport scala.collection.mutable.ArrayBufferobject ArrayDemo {   def main(args: Array[String]) {     //初始化一个长度为8的定长数组,其所有元素均为0     val arr1 = new Array[Int](8)     //直接打印定长数组,内容为数组的hashcode值     println(arr1)     //将数组转换成数组缓冲,就可以看到原数组中的内容了     //toBuffer会将数组转换长数组缓冲     println(arr1.toBuffer)     //注意:如果new,相当于调用了数组的apply方法,直接为数组赋值     //初始化一个长度为1的定长数组     val arr2 = Array[Int](10)     println(arr2.toBuffer)     //定义一个长度为3的定长数组     val arr3 = Array("hadoop", "storm", "spark")     //使用()来访问元素     println(arr3(2))     //变长数组(数组缓冲)     //如果想使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer包     val ab = ArrayBuffer[Int]()     //向数组缓冲的尾部追加一个元素     //+=尾部追加元素     ab += 1     //追加多个元素     ab += (2, 3, 4, 5)     //追加一个数组++=     ab ++= Array(6, 7)     //追加一个数组缓冲     ab ++= ArrayBuffer(8,9)     //打印数组缓冲ab     //在数组某个位置插入元素用insert,从某下标插入     ab.insert(0, -1, 0)     //删除数组某个位置的元素用remove  按照下标删除     ab.remove(0) ab -=3 ab --=Array(1,2)     println(ab)   } }  

5.1.2.    遍历数组

1.增强for循环

2.好用的until会生成脚标,0 until 10 包含0不包含10

 

 

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

 

5.1.3.    数组转换

yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变

 

 

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

5.1.4.    数组常用算法

在Scala中,数组上的某些方法对数组进行相应的操作非常方便!

 

 

转载于:https://www.cnblogs.com/mediocreWorld/p/11329911.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)