集合類(數(shù)組,字典,集合)的枚舉
枚舉器: ENumerator :一個工具類,功能是一一列舉容器類中存儲的元素,枚舉器不需要自己去創(chuàng)建對象,直接獲取容器類對象創(chuàng)建的相應的枚舉器
比如:NSArray *array = @[ob1,ob2,ob3];? Enumerator *enum = [array objectEnumerator]? 即獲取了不可變數(shù)組array的枚舉器
然后與while循環(huán)聯(lián)合使用便可枚舉集合的所有元素: id object = nil;? while(object
= [enum nextObject]){? NSLog{@"object = %@"}, object };
將array中的元素一一打印出來
獲取數(shù)組的反向枚舉器? enum = [array reverseObjectEnumerator];
快速枚舉? for in? :本質是對枚舉器進行了封裝
格式:? for(元素對象的類型 元素對象 in 被枚舉集合)? { 操作... };
舉例: for (id object in array)? {? NSLog:(@"%@",object);? };?? 將array中的各個對象元素一一打印出來
字典容器獲取枚舉器的方法: NSDictionary *dict = @{ob1,ob2,ob3}; ? enum = [dict
keyEnumerator ;]? 即:是要獲得字典中所有key值的枚舉器,再通過對key值的枚舉從而可以對???????? 每個
key值對應的value進行枚舉 .
數(shù)組集合的排序
1.方法排序:(如使用冒泡排序)通過定義數(shù)組中對象的屬性比較方法:compareProperty()和數(shù)組的交換元素方法:exchangeObjectAtIndex:m withObjectAtIndex:n 來實現(xiàn)數(shù)組的排序
方法選擇器@selector的使用可以簡化代碼? 屬性值的比較方法定義格式:??? -(NSComparisonResult)compareProperty:(id)other {.....}
舉例: newArray = [array sortedArrayUsingSelector:@selector(compareProperty)];
2.排序描述類排序:
排序描述類對象的創(chuàng)建: NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:ob ascending:BOOL];
key表示排序主鍵,即對象的屬性名稱? ascending:YES 表示升序排序,反之NO表示降序
舉例:對array數(shù)組中的thisProperty屬性進行排序:
NSSortDescriptor *arrayDesc = [[NSSortDescriptor alloc] initWithKey:thisProperty ascending:YES];?? newArray = [array sortedArrayUsingDescriptors:@[arraytDesc]];
如果sortUsingDescriptors方法的參數(shù)中有多個排序描述對象時,首先按第一個描述排序,遇到相同屬性則按第二個進行排序,依次類推
如:[array sortedArrayUsingDescriptors@[arrayDesc1,arrayDesc2...];
排序描述類排序的好處:可以同時按多種方式排序,而且不用手動寫比較屬性方法的實現(xiàn)
3.block方法排序:? 舉例: array sortedArrayUsingComparator:^NSComparisonResult(id ob1, id ob2){......}