なぜですか?そして、イテレータアイテムポインタを最初の位置に移動する最善の方法は?イテレータにリセットメソッドがないのはなぜですか?
答えて
なぜですか?
あなたがリセット方法を持つようにイテレータを強制した場合、すべてのイテレータはリセットメソッドを持っている必要があるため。これはイテレータのライターに余分な作業を与えます。さらに、イテレータの中にはリセットするのが難しい(または本当に高価な)ものがあり、ユーザがリセットを呼び出すことを望まないものもあります。ファイルやストリームのイテレータは良い例です。
イテレータアイテムポインタを最初の位置に移動するにはどうすればよいでしょうか?
新しいイテレータを作成します。それはリセットよりも稀ではありません。
新しい方法を作成することをお勧めします。
まったく同じ方法(Javaの似ているが、私は便利なJavaのREPLはありません):(= iteratable.iteratorイテレータ
ストリームを読み終えたら、再度ソースを開くことなくストリームを読み込むことはできません。これがストリームとイテレータの仕組みです。
これは、JCFで採用されている一般的な傾向です。インターフェイスが最小限に抑えられます。これは、不変なコレクション、固定サイズのコレクションのようなセマンティクスのための別個のインターフェースを持たない理由です。
なぜ、remove(Object)
が提供されたのですか? - これを提供しないと、安全に削除できなくなります。コレクションを繰り返しながらコレクションのアイテム - reset()
を提供するものは何もありません。再び
、別個ListIterator()
がある理由(previous()
とpreviousIndex()
ような方法を提供) - List
インタフェースと、それが使用されている間、主な機能は、要素がインデックスをWRTレイアウトする能力である、とすることができるようにします固定順序であろうとランダムであろうと、索引順でアクセスしてください。 List
のためにこのインターフェイスを提供しないと、リストでスムーズに作業することが不可能ではないにしても非常に困難になります。
ほとんどすべての 'Iteratable'と' Iterator'でできることがいくつかありますが、これは有益なことにインターフェイスに含まれていた可能性があります。有用なイテレータメソッドは 'skip' [N個の連続した移動呼び出しに相当するが、多くのイテレータは時間O(1)でそれを実装することができる]と' copyLocation' [元のものと同じアイテムを生成すると予想されるイテレータを返す]。任意のイテレータは 'skip'メソッドを実装でき、巨大ではない有限イテレータは配列に列挙し、それとそのコピーを持つことで' copyLocation'を実装できます... – supercat
...その配列からアイテムを返します。クライアントコードはいずれかの操作自体を実行できますが、イテレータがクライアントコードに欠けている内部動作についての特別な知識を持っている場合は、その知識を使用して多大な速度向上を実現できます。 – supercat
ヒント:イテレータ変数を関数として作成してから、必要な回数だけ消費することができます。これは、基礎となるロジックが繰り返し可能な場合にのみ機能します。 Scalaでは
例あなたは以前のものを作成
def i = (1 to 100) iterator // i is our iterator
i.grouped(50) foreach println // prints two groups
i.grouped(50) foreach println // prints same two groups again
- 1. なぜstd :: pairにイテレータがないのですか?
- 2. なぜこのイテレータはconstですか?
- 3. このjQueryのリセットメソッドが正しく動作しないのはなぜですか?
- 4. 拡張forループがイテレータで機能しないのはなぜですか?
- 5. NSEnumeratorイテレータがDrawRect内のオブジェクトプロパティを認識しないのはなぜですか?
- 6. map.eraseがイテレータを返すのはなぜですか?
- 7. yieldがイテレータを返すのはなぜですか?
- 8. 逆方向イテレータを順方向イテレータに変換できないのはなぜですか?
- 9. このイテレータが次の値を返すのはなぜですか?
- 10. Javaがイテレータでforeachを許可しないのはなぜですか(イテラブルのみ)。
- 11. constとnonconstイテレータの組み合わせでstd :: distanceが機能しないのはなぜですか?
- 12. DynamicArrayクラスのイテレータを作成しようとしています。私のイテレータでSTLソートが動作しないのはなぜですか?
- 13. イテレータが機能しない
- 14. なぜイテレータを動かすことができませんでしたか?
- 15. PHPがlocalstorageにタップできないのはなぜですか?
- 16. Salesforceには、なぜスキンビルダーにOpportunityContactRoleがないのですか?
- 17. 私のjsonStoreにデータがないのはなぜですか?
- 18. Android:Spinnerに標準のデザインがないのはなぜですか?
- 19. Silverlightのシステムオブジェクトにメソッドがないのはなぜですか?
- 20. 私のC#にSystem.ServiceProcessライブラリがないのはなぜですか?
- 21. Javaに「ディープ」ワイルドカードのインポートがないのはなぜですか?
- 22. 私のコンソールに出力がないのはなぜですか?
- 23. ボールが窓の中央にないのはなぜですか?
- 24. 私のUIBarButtonItemにタイトルがないのはなぜですか?
- 25. 数値セルに.Characters()プロパティがないのはなぜですか?
- 26. immutable.jsクラスに "new"が必要ないのはなぜですか?
- 27. Swiftに「new」キーワードが必要ないのはなぜですか?
- 28. Kotlinに並行性キーワードがないのはなぜですか?
- 29. JFreeChartにテキストがないのはなぜですか?
- 30. C++に "NULL参照"がないのはなぜですか?
(操作がオプションなので、*実際にはすべてのイテレータに "余分な作業"を与えない* removeメソッドがあることを除いて) – aioobe
@aioobe現在のオブジェクトをイテレータは、開発者にとっては人生を本当に簡単にします。ほとんどの場合、新しいイテレータを作成することができるので、これがリセットに当てはまる場合はほとんどありません。 – DJClayworth
@DJClayworth "これはすべてのイテレータライターに余分な仕事を与えます。"これは合理的な対応ではありません。図書館の作成者はもう少し努力する必要がありますが、多くの図書館利用者が利益を得るというメリットがあります。 – stackoverflowuser2010