filter

 
 

Description

predがtrueを返す要素だけをイテレートするイテレータを返します。

selectとfilterは全く同じ動作です。

Example

ゲームのオブジェクトの更新・削除を意識したサンプルです。イテレータはfiberを使って実現されているので、もちろんfor文で書いた方が速いです。

C++

Xtal

class Object{
    + _isAlive : false;
    _i;
 
    initialize(_i){}
 
    update(){
        if (math::random() < 0.5){
            %f[Object %d is finished.](_i).p;
            return false;
        }
        return true;
    }
 
    release(){
        _isAlive = false;
        %f[Object %d is released.](_i).p;
    }
}
 
objs : [];
10.times{
    obj : Object(it);
    obj.isAlive = true;
    objs.push_back(obj);
}
 
objs.filter(|obj| obj.isAlive?(!obj.update()):false){
    it.release();
}
 
objs{
    it.isAlive.p;
}

Output

Object 0 is finished.
Object 0 is released.
Object 1 is finished.
Object 1 is released.
Object 3 is finished.
Object 3 is released.
Object 5 is finished.
Object 5 is released.
Object 6 is finished.
Object 6 is released.
false
false
true
false
true
false
false
true
true
true
reference/iterator/filter.txt · 最終更新: 2011/07/15 09:00 by sukai
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0