for と foreach はどちらの方がパフォーマンスが優れていますか? それとも、異なるデータを処理する際にそれぞれの利点があるのでしょうか? 誰かが答えてくれると嬉しいです。
小伙看你根骨奇佳,潜力无限,来学PHP伐。
はいArrayList这样的可使用下标进行随机访问的数据结构,使用下标访问,要比foreach的方式进行顺序访问,速度要快一些。foreach这样写法,使用的过程产生一个额外的对象Enumerator、各アクセスにはより多くの操作が必要となり、パフォーマンスが低下します。
ArrayList
foreach
Enumerator
foreach是通过GetEnumerator获得一个IEnumerator对象,通过IEnumerator对象执行MoveNext()方法和获取Current属性がトラバースされます。
GetEnumerator
IEnumerator
MoveNext()
Current
だってEnumerator中,做了版本检查处理的工作,所以使用foreach是线程安全
版本检查处理
线程安全
そうですfor的效率通常来说是高于foreachですが、絶対とは言えません。
for
それではどうやって選べばいいのでしょうか?私の提案は、効率と安全性の両方を考慮して、複数のスレッドからアクセスできるいくつかのグローバル データ構造オブジェクトで foreach。而对本地变量,则使用for を使用することです。
更新: 情報を確認したところ、10W を超える配列の場合は foreach の方が効率的ですが、1W の配列の場合は for の方が依然として効率的であることがわかりました。 http://blog.csdn.net/w2cschoo...
foreach特にphp7では、配列のデータ構造を変更した後、foreachが高速になります
結局のところ、最初に配列をカウントする必要がないので、foreach を使用することをお勧めします。
はい
ArrayList
这样的可使用下标进行随机访问的数据结构,使用下标访问,要比foreach
的方式进行顺序访问,速度要快一些。foreach
这样写法,使用的过程产生一个额外的对象Enumerator
、各アクセスにはより多くの操作が必要となり、パフォーマンスが低下します。foreach
是通过GetEnumerator
获得一个IEnumerator
对象,通过IEnumerator
对象执行MoveNext()
方法和获取Current
属性がトラバースされます。だって
Enumerator
中,做了版本检查处理
的工作,所以使用foreach
是线程安全
そうです
for
的效率通常来说是高于foreach
ですが、絶対とは言えません。それではどうやって選べばいいのでしょうか?私の提案は、効率と安全性の両方を考慮して、複数のスレッドからアクセスできるいくつかのグローバル データ構造オブジェクトで
foreach
。而对本地变量,则使用for
を使用することです。更新: 情報を確認したところ、10W を超える配列の場合は foreach の方が効率的ですが、1W の配列の場合は for の方が依然として効率的であることがわかりました。
http://blog.csdn.net/w2cschoo...
foreach
特にphp7では、配列のデータ構造を変更した後、foreachが高速になります
結局のところ、最初に配列をカウントする必要がないので、foreach を使用することをお勧めします。