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 }