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 }
原文地址:https://www.cnblogs.com/LazyJoJo/p/6411659.html