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 }