Scala學習——array與arraybuffer的區別(初)


1.由於Array是不可變的,所以不能直接地對其元素進行刪除操作,只能通過重賦值或過濾生成新的Array的方式來刪除不要的元素。

而ArrayBuffer是可變的,本身提供了很多元素的操作,當然包括刪除操作。( 如果你需要在Array和ArrayBuffer之間轉換,那么分別調用toArray()和toBuffer()方法即可

 

 1 object DeleteOperators extends App {
 2 
 3   /*Array的size是不可以改變的,所以沒有直接刪除其元素的方法,
 4     只能通過修改其元素值或者用另外的Array來取要的元素,過濾不要的元素,說白了就是通過過濾來刪除Array中的元素,生存新的Array.
 5   * */
 6   val a = Array("apple", "banana", "cherry")
 7   a(0)=""
 8   a(1)=null
 9   a.foreach(println)
10   val x = Array("apple", "banana", "cherry")
11   val c = x.filter(!_.contains("apple"))
12   c.foreach(println)
13 
14   /*ArrayBuffer是可變的序列,也就是說它的size是可改變的,所以可以直接刪除它的元素,它提供了響應的方法.*/
15   val b = ArrayBuffer('a','b','c','d','e','f','g','h','i','j','k','l')
16   b -= 'a' //刪除1個指定元素;
17   b -= ('b','c')  //刪除多個指定元素
18   b --= Seq('d','e')  //通過1個集合來刪除元素(可以用Array,Set)
19   b.remove(0) //通過index來刪除元素
20   b.remove(1,2) //通過index來刪除多個元素
21   b.clear() //清除所有元素
22   println(b)
23 
24 }

 

2.yield的使用(產生一個新的Array)

 1  object HelloWorld {  2  def main(args: Array[String]) {  3 val a = Array(2, 3, 5, 6);  4 val result = for (elem <- a) yield elem * 2  5  result.copyToArray(a)  6 for (elem <- a) {  7 print(elem + ",") //output:4,6,10,12,  8  }  9  } 10 } 

 

看一個例子:

 

 1 import scala.collection.mutable.ArrayBuffer
 2 object test1 {
 3   def main(args: Array[String]) {
 4     //移除除第一個負數之外的所有負數  
 5     val a = Array(1, -2, 3, -5, 4, -5)
 6     var first = true
 7     //首先收集需要保留的數,返回的結果是一個vector集合  
 8     val indexs = for (i <- 0 until a.length if first || a(i) >= 0) yield {
 9       if (a(i) < 0) first = false; a(i)
10     }
11     print(indexs)  
12   }
13 
14 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM