Scala教程(四)数组进阶实战

来源:互联网 发布:软件论坛 编辑:程序博客网 时间:2024/04/30 06:37

 

Scala教程()数组进阶实战



1 数组Array


1.1 定义数组

  所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。

  // 声明Int类型、String类型数组  val number = new Array[Int](10);                //> number  : Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)  val stringArray = new Array[String](10);        //> stringArray  : Array[String] = Array(null, null, null, null, null,                                                   //| null,null, null, null, null)

1.2 声明并赋值

  // 声明并赋值  val strArray = Array("Hello","world")           //> strArray  : Array[String] = Array(Hello, world)  strArray(0) = "One"  strArray                                        //> res0: Array[String] = Array(One, world)

1.3 遍历数组 

  // for循环便利元素  for(i <-0 until(stringArray.length)){  println(i+":"+stringArray(i))     //> 0:null                                                  //| 1:null                                                  //| 2:null                                                  //| 3:null                                                  //| 4:null                                                  //| 5:null                                                  //| 6:null                                                  //| 7:null                                                  //| 8:null                                                  //| 9:null   }

2 动态数组ArrayBuffer


2.1 定义动态数组

  // 动态数组  var buffer = new ArrayBuffer[Int]()             //> buffer  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

2.2 末端追加元素

  // 用+=在尾端添加元素  buffer +=1                                      //> res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)

2.3 末端追加多个元素

  // 在尾端添加多个元素  buffer +=(1,2,3,5)                              //> res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,                                                  //> 2, 3, 5)

2.4 末端追加集合

  // 可以用 ++=操作符追加任何集合  buffer ++=Array(8,13,21)                        //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2,                                                   //|  3, 5,8, 13, 21)

2.5 添加元素

  // 在第2个元素后添加元素6  buffer.insert(2, 6)  buffer                                          //> res5: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,                                                   //  | 6, 2)      // 在第2个元素后添加多个元素  buffer.insert(2, 7,8,9)  buffer                                          //> res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,                                                   //|  7, 8, 9, 6, 2)

2.6 删除元素

// 删除位置是第2个元素  buffer.remove(2)                                //> res7: Int = 7  buffer                                          //> res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 8,                                                  //|  9, 6,2)  // 从第3个元素开始移除3个元素  buffer.remove(2, 3)  buffer                                          //> res9: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)

2.7 将动态数据转为数组

  // 将数组缓冲转换为Array  buffer.toArray                                  //> res10: Array[Int] = Array(1, 1, 2)

3 yield关键字及排序


3.1 yield关键字

yield关键字 for循环中的 yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala for循环是有返回值的。如果被循环的是 Map,返回的就是  Map,被循环的是 List,返回的就是 List,以此类推。

   

   // 声明元素   val nums = Array(2,3,5,7,11)                   //> nums  : Array[Int] = Array(2, 3, 5, 7, 11)   // nums中的元素都*2,并返回新的集合   var result = for(elem <-nums) yield 2 * elem   //> result  : Array[Int] = Array(4, 6, 10, 14, 22)      // 生成nums集合中值对2取余为0的数,乘2,返回新的集合   for(elem <-nums if elem %2  == 0) yield elem *2//> res11: Array[Int] = Array(4)   nums.filter(_ % 2 == 0).map { 2*_}             //> res12: Array[Int] = Array(4)

3.2 Array求合

Array(1,7,2,9).sum                             //> res13: Int = 19

3.3 获取数组中最大长度元素  

// 字符串获取长度最大的值ArrayBuffer("Mary","had","a","little","lamb").max

3.4 排序

   // 排序   val order = ArrayBuffer(1,7,2,9)               //> order  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1,                                                   //| 7, 2, 9)   val res = order.sorted                         //> res  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2,<pre name="code" class="java">                    //| 7, 9)

3.5 quickSort排序

// 排序  val sortArr= Array(1,7,2,9)                     //> sortArr  : Array[Int] = Array(1, 7, 2, 9)  Sorting.quickSort(sortArr)    // 使用and 连接元素  sortArr.mkString(" and ")                       //> res15: String = 1 and 2 and 7 and 9  // 前后以<>填充,中间以,分隔  sortArr.mkString("<",",",">")                   //> res16: String = <1,2,7,9>

4 多维数组

4.1 定义多维数组

  // 多维数组\三行四列数组  val multiArr = Array.ofDim[Double](3,4);        //> multiArr  : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0                                                  //| .0, 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0))  multiArr(2)(1)=45multiArr                                  //> res17: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0                                                  //| .0, 0.0, 0.0), Array(0.0, 45.0, 0.0, 0.0))
 

4.2 数据嵌套

  var triangle = new Array[Array[Int]](10)        //> triangle  : Array[Array[Int]] = Array(null, null, null, null, null,                                                   //| null,null, null, null, null)  for(i <-0 until triangle.length)  triangle(i) = new Array[Int](i+1)  triangle                                  //> res18: Array[Array[Int]] =                                                     //| Array(                                                    //| Array(0),                                                    //| Array(0, 0) ,                                                    //| Array(0, 0, 0),                                                     //| Array(0, 0, 0, 0),                                                     //| Array(0, 0, 0, 0, 0),                                                    //| Array(0, 0, 0, 0, 0, 0),                                                     //| Array(0, 0, 0, 0, 0, 0, 0),                                                     //| Array(0, 0, 0, 0, 0, 0, 0, 0),                                                     //| Array(0, 0, 0, 0, 0, 0, 0, 0, 0),                                                    //| Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) 


 

   --以上为数组进阶实战的内容,谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)

0 0