Scala是非常優雅的過濾不變的序列:斯卡拉ArrayBuffer刪除與predicat所有元素
var l = List(1,2,3,4,5,6)
l = l.filter(_%2==1)
但我怎麼做這與可變集合類似ArrayBuffer? 所有我發現是去除單一元素或切片,或刪除另一個序列的元素,但沒有能夠消除謂詞給出元素。
編輯: 我希望能找到壽此類似:
trait Removable[A] extends Buffer[A]{
def removeIf(p: A => Boolean){
var it1 = 0
var it2 = 0
while(it2 < length){
if(p(this(it2))){
it2 += 1;
}
else {
this(it1) = this(it2)
it1 += 1;
it2 += 1;
}
}
trimEnd(it2-it1)
}
}
這個過濾器的線性時間,可混入任何緩衝區,但只有ArrayBuffer是有道理的,在ListBuffers這將是緩慢的,因爲索引確實需要線性時間。
你'filterInPlace'是緩慢的,因爲'b.remove(我)'是O(n)的方法。 – 2013-08-02 09:44:07