for in 快速列舉

2021-07-12 02:58:27 字數 746 閱讀 3860

突然研究了下for迴圈和for in 的區別,之前一直覺得這兩者是相同的。

for in實際上是快速列舉,跟for迴圈意義上還是有區別的。你去研究一下列舉。

oc的for in 快速列舉遍歷的時候是按照元素在容器內的順序(nsarray中元素的順序是你新增的順序,nsset和nsdictionry中元素的順序是按照底層演算法進行排序的與你新增的順序不同)進行列舉的。

要注意的是使用for in快速列舉nsmutablearray這類可變物件時要注意不能對容器進行修改,否則會導致遍歷器丟擲異常導致程式崩潰。

這是因為用for迴圈機器不能自己察覺,但是列舉器可以察覺。

實際使用中卻不是那麼回事,如果在for in 迴圈裡,對這個陣列進行了修改的話,無論是增,刪,修改陣列元素位置,都會扔乙個異常出來,錯誤是被遍歷的陣列已被銷毀(<__nsarraym: 0xa4fc000> was mutated while being enumerated.),比如以下**:

nsmutablearray* arr = [nsmutablearray arraywithobjects:@"1",@"2",@"3", nil];

for (nsstring* str in arr)

}

如果你這麼做了,列舉器會很困惑,而你將得到未定義的結果。

這個錯誤(<__nsarraym: 0xa4fc000> was mutated while being enumerated.)的意思是:列舉的過程中陣列發生了突變

快速遍歷 for in

快速遍歷 for.in.nsarray ages 12,23,22,16,34 注意快速遍歷過程中,不允許需改元素個數 盡量保證快速遍歷的集合中的元素型別一致 for nsnumber nin ages nsdictionary dic 快速遍歷對於字典來說每次得到的都是鍵 for nsstring...

素數的快速列舉 二

半年前曾在我的blog發過一篇文章 http blog.csdn.net northwolves archive 2005 04 18 351998.aspx 對素數的快速列舉進行了初步 隨後的討論在http community.csdn.net expert topic 4395 4395751....

素數的快速列舉 三

在 文章中,對小素數的列舉進行了 今天發現,由於小素數的倍數比較多,過濾所用時間較長。所以先對奇數進行初步過濾,可以達到提速的效果,繼續改進如下 private sub command1 click dim p as long dim i as long for i 2 to 8 prime 10 ...