====== 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