स्काला बहुत ही सुंदर है निकालें:स्केला 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 (i) 'एक हे (एन) विधि है। –