OC第六节 遍历集合、数组排序
1、遍歷的?式?for、枚舉器、forin。
? ①.for循環同C語言,循環條件是集合的元素個數或鍵值對個數,無序的集合要先轉換成數組在根據下標遍歷
? ②.枚舉器 NSEnumerator?
objectEnumerator (reverseObjectEnumerator) ? 創建枚舉器(反向枚舉器)
nextObject? 與while循環連用,遍歷集合
? ③. for … in :快速枚舉,是在NSEnumerator的基礎上封裝的更加方便的快熟便立即和元素的方式,格式如下:
? ? for (<#type *object#> in <#collection#>) {
? ? ? ? ?<#statements#>
? ? }
?? ? type *object: type *? 代表從集合中獲取到的對象類型
?? ? object 只是一個名稱,只需要滿足變量名命名法則即可
?? ? collection 代表遍歷的集合
?? ? statements 遍歷中需要執行的操作
?? ? for in 遍歷注意事項:
for in 遍歷可以使用嵌套,一般在字典中可以用到,先遍歷key值,在value值里如果是集合,可以遍歷集合元素
for in 遍歷相當與枚舉器,所以在遍歷時不能修改值,只能先用其他東西提取出來然后再賦值回去
?
2、三者的區別?
①. for?于知道容器中的對象個數
②. 枚舉器,通常與while循環連?,nextObject只要能獲取到對象,就繼續執?枚舉,直到空為?
③. forin內部封裝了枚舉器,forin和枚舉器在遍歷時不允許改變集合的容量。
?
3、使用NSSortDescriptor進行數組排序三步走
? ? ? ? 1、創建一個用來排序的數組
? ? ? ? 2、創建一個排序條件,也就是一個NSSortDescriptor對象,初始化中需要指定按照數組中對象中什么屬性值排序,升序或者降序
? ? //?第一個參數為數組中對象要按照什么屬性來排序(比如自身,姓名,年齡)
? ? //?第二個參數為指定排序方式是 升序還是 降序
? ? ? ? 3、數組根據排序條件進行排序,得到一個排序之后的數組(如果是可變數組,不會生成新數組,還是本身)
?
4、創建?個NSSortDescriptor對象的方法(initWithKey方法)
? ? ①.?sortedArrayUsingDescriptor:@[NSSortDescriptor對象,即排序方式]
? ? ②.?sortedArrayUsingDescriptors? 后面可以接多個NSSortDescriptor對象,對象之間哪個在前那個的優先級更高。
? ? ③.?sortedArrayUsingSelector:SEL(@selector(?法名))? 必須先要一個排序方法才能用
? 注:?// SEL類型的參數 只能用 @selector(方法名) 給定。
?//?如果數組使用這個方法進行排序,此方法必須是返回值為NSComparisionResult。
? ? ?//?數組排序 需要傳入的方法參數 要的是方法的返回值,根據方法的返回值決定到底是按照升序排列還是降序排列。
?
5、猜測在默認排序方法(compare: )的實現
? ??/* ?冒泡排序內部
? ? ? ? ?if (表達式 > 0) {
? ? ? ? ? ? ?交換;
? ? ? ? ?} ?*/
? ? //方法的返回值為1,說明前面的大于后面的,降序,那么表達式的值為1,進行交換后前面的就小于后面的了,所以就成了升序,compare: 方法就是默認升序的。
? ? //方法的返回值為2,說明前面的小于后面的,升序,那么表達式的值為-1,不會進行交換,那么還是升序。
?
?
轉載于:https://www.cnblogs.com/hyl2012/p/5213043.html
總結
以上是生活随笔為你收集整理的OC第六节 遍历集合、数组排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#菜鸟正则表达式一
- 下一篇: 值传递和引用传递的讲解