IteratorAggregateを使用してメンバー配列を反復処理する

StackOverflow https://stackoverflow.com/questions/331376

  •  11-07-2019
  •  | 
  •  

質問

クラスがあり、特定の配列メンバーを反復処理できるようにします。クイック検索を行ったところ、 IteratorAggregate

が見つかりました。
class foo implements IteratorAggregate
{
    protected 

クラスがあり、特定の配列メンバーを反復処理できるようにします。クイック検索を行ったところ、 IteratorAggregate

が見つかりました。
    protected 

クラスがあり、特定の配列メンバーを反復処理できるようにします。クイック検索を行ったところ、 IteratorAggregate

が見つかりました。
class foo implements IteratorAggregate
{
    protected 

クラスがあり、特定の配列メンバーを反復処理できるようにします。クイック検索を行ったところ、 IteratorAggregate

が見つかりました。 <*>

これはうまく機能しますが、 foreach が使用されるたびに新しい ArrayIterator インスタンスを作成しませんか?

したがって、イテレータインスタンスをメンバーに保存する必要があると考えました:

<*>

問題は、イテレータが getIterator()の最初の呼び出し中に $ this-&gt; _array のコピーを使用するため、メンバーへの変更が行われないことです。後続の foreach 構造に反映されます。

ArrayIterator をサブクラス化し、 setArray($ array)メソッドを追加し、 getIterator()で返す前に呼び出す必要があると考えていました、しかし、内部的に使用する配列のメンバー名と、サブクラスによって上書き可能かどうかはわかりません。

問題は、これは時期尚早な、および/または不必要な最適化ですか?いいえの場合、これを達成する最良の方法は何ですか?

array = array('foo'=>'bar', 'baz'=>'quux'); public function getIterator() { return new ArrayIterator($this->_array); } }

これはうまく機能しますが、 foreach が使用されるたびに新しい ArrayIterator インスタンスを作成しませんか?

したがって、イテレータインスタンスをメンバーに保存する必要があると考えました:

<*>

問題は、イテレータが getIterator()の最初の呼び出し中に $ this-&gt; _array のコピーを使用するため、メンバーへの変更が行われないことです。後続の foreach 構造に反映されます。

ArrayIterator をサブクラス化し、 setArray($ array)メソッドを追加し、 getIterator()で返す前に呼び出す必要があると考えていました、しかし、内部的に使用する配列のメンバー名と、サブクラスによって上書き可能かどうかはわかりません。

問題は、これは時期尚早な、および/または不必要な最適化ですか?いいえの場合、これを達成する最良の方法は何ですか?

iterator; public function getIterator() { if (!$this->_iterator instanceof ArrayIterator) { $this->_iterator = new ArrayIterator($this->_array); } return $this->_iterator; }

これはうまく機能しますが、 foreach が使用されるたびに新しい ArrayIterator インスタンスを作成しませんか?

したがって、イテレータインスタンスをメンバーに保存する必要があると考えました:

<*>

問題は、イテレータが getIterator()の最初の呼び出し中に $ this-&gt; _array のコピーを使用するため、メンバーへの変更が行われないことです。後続の foreach 構造に反映されます。

ArrayIterator をサブクラス化し、 setArray($ array)メソッドを追加し、 getIterator()で返す前に呼び出す必要があると考えていました、しかし、内部的に使用する配列のメンバー名と、サブクラスによって上書き可能かどうかはわかりません。

問題は、これは時期尚早な、および/または不必要な最適化ですか?いいえの場合、これを達成する最良の方法は何ですか?

array = array('foo'=>'bar', 'baz'=>'quux'); public function getIterator() { return new ArrayIterator($this->_array); } }

これはうまく機能しますが、 foreach が使用されるたびに新しい ArrayIterator インスタンスを作成しませんか?

したがって、イテレータインスタンスをメンバーに保存する必要があると考えました:

<*>

問題は、イテレータが getIterator()の最初の呼び出し中に $ this-&gt; _array のコピーを使用するため、メンバーへの変更が行われないことです。後続の foreach 構造に反映されます。

ArrayIterator をサブクラス化し、 setArray($ array)メソッドを追加し、 getIterator()で返す前に呼び出す必要があると考えていました、しかし、内部的に使用する配列のメンバー名と、サブクラスによって上書き可能かどうかはわかりません。

問題は、これは時期尚早な、および/または不必要な最適化ですか?いいえの場合、これを達成する最良の方法は何ですか?

役に立ちましたか?

解決

2番目のコードは、オブジェクトの複数のループで失敗し、別のループが終了する前に新しいループを開始します。

実際には、どちらかに時間をかけるだけの価値がある最適化のように見えます。

他のヒント

  

しかし、foreachが使用されるたびに新しいArrayIteratorインスタンスを作成しませんか?

はい、そして?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top