一字典類 二集合類 三數組字典集合的快速遍歷 四數組排序 五數組元素按照數值大小排序
字典?於保存具有映射關系(key-value對)數據的集合。對於“姓名:張三”來講,key就是“姓名”,key對應的value是“張三”。一個key-value對認為是?個條目,字典是存儲key-value對的容器。與數組不同,字典靠key存取元素。key不能重復,value必須是對象。鍵值對在字典中是無序存儲的。字典也分為,不可變字典(NSDictionary)和可變字典(NSMutableDictionary)。
NSDictionary,不可變字典,繼承NSObject。即字典一旦創建,鍵值對就不可更改,不可添加,不可刪除。僅能讀取key或者value。
/* 不可變字典 */
/* 創建對象 */
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@ZhangSan, @name,
@Man, @sex,
@18, @age,
@130, @weight,
nil];
/* 輸出字典 */
NSLog(@%@, dic);
/* 獲取所有的Key值 */
[dic allKeys];
NSLog(@%@, [dic allKeys]);
/* 獲取所有的Value值 */
[dic allValues];
NSLog(@%@, [dic allValues]);
/* 通過Key查詢Value值 */
[dic objectForKey:@name];
NSLog(@%@, [dic objectForKey:@name]);
[dic valueForKey:@name];
NSLog(@%@, [dic valueForKey:@name]);
/* 遍歷字典 */
NSArray *keyArr = [dic allKeys];
for (int i = 0; i < keyArr.count; i++) {
NSString *keyStr = [keyArr objectAtIndex:i];
NSLog(@%@, [dic objectForKey:keyStr]);
}
/* 快速遍歷 */
for (NSString *key in dic) {
NSLog(@%@, [dic objectForKey:key]);
}
/* keyArr快速遍歷 */
for (NSString *str in keyArr) {
NSLog(@%@, str);
}
NSMutableDictionary,可變字典,繼承NSDictionary。可以對管理的鍵值對進?行增、刪、改。
/* 可變字典 */
NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@LiSi, @name,
@18, @age,
@woman, @sex,
@120, @weight,
nil];
for (NSString *key in mDic) {
NSLog(@%@, [mDic objectForKey:key]);
}
/* 增加鍵值對 */
[mDic setObject:@170cm forKey:@height];
[mDic setValue:@volleyball forKey:@hobby];
for (NSString *key in mDic) {
NSLog(@%@, [mDic objectForKey:key]);
}
/* 修改鍵值對 */
[mDic setObject:@20 forKey:@age];
for (NSString *key in mDic) {
NSLog(@%@, [mDic objectForKey:key]);
}
/* 刪除鍵值對 */
[mDic removeObjectForKey:@hobby];
for (NSString *key in mDic) {
NSLog(@%@, [mDic objectForKey:key]);
}
集合類*NSSet,類似數學中集合的概念,具有確定性、無序性、互異性*。即集合中存儲的元素必須是對象類型,存儲的元素是無順序的,存儲的元素唯一。集合類也分為NSSet和NSMutableSet。
NSSet的示例代碼如下:
/* 不可變Set */
/* 創建 */
NSSet *set = [NSSet setWithObjects:@四平, @長春, @吉林, @四平, nil];
/* 獲取Set元素個數 */
NSLog(@%lu, set.count);
/* 獲取Set中某一元素 */
NSLog(@%@, [set anyObject]);
/* 判斷Set中是否包含某一個對象 */
if ([set containsObject:@沈陽]) {
NSLog(@有);
}
else {
NSLog(@無);
}
/* 遍歷集合 */
for (NSString *str in set) {
NSLog(@%@, str);
}
NSMutableSet的示例代碼如下:
/* 可變集合 */
NSSet *set2 = [NSSet setWithObjects:@DaLian, @BeiJing, nil];
NSMutableSet *mSet = [NSMutableSet setWithSet:set2];
/* 合並兩個集合 */
[mSet unionSet:set];
for (NSString *str in mSet) {
NSLog(@%@, str);
}
/* 相交兩個集合 */
[mSet intersectSet:set];
/* 添加元素 */
[mSet addObject:@通化];
/* 刪除元素 */
[mSet removeObject:@BeiJing];
for (NSString *str in mSet) {
NSLog(@*%@*, str);
}
NSCountedSet是NSMutableSet的子類,能記錄元素的重復次數。在NSSet的基礎上添加了計數功能。
NSCountedSet的示例代碼如下:
/* NSCountedSet類 */
NSArray *arr = [NSArray arrayWithObjects:@Zhang, @LiSi, @LiSi, @Wang, @Wang, @LiSi, nil];
NSCountedSet *countSet = [NSCountedSet setWithArray:arr];
/* 查看countSet元素個數 */
NSLog(@%lu, countSet.count);
/* LiSi計數 */
NSLog(@%lu, [countSet countForObject:@LiSi]);
for (<#type *object#> in <#collection#>) {
}
object是遍歷得到的元素對象。 collection是集合類型的對象:數組、字典、集合。
集合類型枚舉的特點
數組枚舉得到數組中的元素對象。 字典枚舉得到字典中的key值。 集合枚舉得到集合中的元素對象。
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@ZhangSan, @name,
@Man, @sex,
@18, @age,
@130, @weight,
nil];
/* 快速遍歷 */
for (NSString *key in dic) {
NSLog(@%@, [dic objectForKey:key]);
}
數組排序取決於判斷條件,判斷條件決定了排序的?式(升序、降序)。iOS為數組提供了排序?法,同時提供了接口讓我們傳遞判斷條件。
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@3, @2, @1, @4, nil];
/* 可變數組排序 */
/* @selector --> 方法選擇器, 獲取方法名的意思.
* compare: --> 數組中元素的方法(元素是字符串, compare是字符串的一個方法)
*/
[mArr sortUsingSelector:@selector(compare:)];
NSLog(@%@, mArr);
/* 不可變數組排序 */
NSArray *arr = [NSArray arrayWithObjects:@4, @2, @1, @3, nil];
NSArray *sortArr = [arr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@%@, sortArr);
數組中存儲的元素是對象類型,如果存儲的元素都是數值對象,按照上述方法排序就不能得到正確的結果。因此,需要使用NSNumberFormatter將字符串轉化為NSNumber對象。具體實現代碼如下:
#pragma mark - 數值數組排序
#if 1
NSArray *arr = @[@1, @12, @122, @67, @50, @666];
NSMutableArray *numArr = [NSMutableArray array];
for (NSString *string in arr) {
// NSNumberFormatter格式轉化
NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
// NSString 轉成 NSNumber
NSNumber *num = [format numberFromString:string];
[numArr addObject:num];
}
// 根據數組裡元素的類型來調用相應的方法, 相當於排序中條件判斷
NSLog(@%@, [numArr sortedArrayUsingSelector:@selector(compare:)]);
#endif