// 不可變字典
// 字典是適用於存放鍵值對的一種集合,裡面的元素必須是對象類型
// 字典是無序的
// 字典賦值
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"guozai",@"name",@"nan",@"sex",@"14",@"age" ,nil];
// 直接打印字典名就可以
NSLog(@"%@",dic);
// 取出來的鍵值都用NSString* 指向
NSString *age = [dic objectForKey:@"age"];
NSLog(@"%@",age);
NSString *nam = [dic objectForKey:@"name"];
NSLog(@"%@",nam);
// NSString * sex = [dic objectForKey:@"sex"];
NSLog(@"%@",[dic objectForKey:@"sex"]);
// 獲取所有的key值
NSArray * keys = [dic allKeys];
//直接打印數組名
NSLog(@"%@",keys);
// 獲取所有的value值
NSArray * objects = [dic allValues];
NSLog(@"%@",objects);
//=========================================================
// 可變字典
// 根據已有字典創建新字典
NSMutableDictionary *mulDic = [NSMutableDictionary dictionaryWithDictionary:dic];
// 添加鍵值對 score->100
[mulDic setObject:@"100" forKey:@"score"];
NSLog(@"%@",mulDic);
// 刪除鍵值對sex->nan
[mulDic removeObjectForKey:@"sex"];
NSLog(@"%@",mulDic);
// 修改鍵值對的值,其實就是添加的方法設置就行
[mulDic setObject:@"13" forKey:@"age"];
NSLog(@"%@",mulDic);
//================================================
// 遍歷字典
NSArray * allkeys = [mulDic allKeys];
for (int i = 0; i < [allkeys count]; i ++) {
// 獲取下標對應的key
NSString * key = [allkeys objectAtIndex:i];
// 根據key獲取value
NSString * value = [mulDic objectForKey:key];
NSLog(@"%@",value);
}
// 或則直接用allvalue方法取出所有value
NSArray * allValue = [mulDic allValues];
for (int i = 0; i < [mulDic count]; i ++) {
NSLog(@"%@",[allValue objectAtIndex:i]);
}
/*
1字典是適用於存放鍵值對的一種集合,裡面的元素必須是對象類型,
2字典裡面的key時唯一的,不能重復,但是value是可以重復的
3字典是一種無序集合,鍵值對順序不確定,可以將字典理解成“下標是字符串的數組”
4字典通過key去值,設置值,修改值.遍歷時,可以先便利所有的key,然後根據key值遍歷value,或者直接通過allvalue方法遍歷所有的值。
*/
//==============================================================
// NSSet 集合
// 使用便利構造器定義set
NSSet *set = [NSSet setWithObjects:@"guozai",@"zaigguo",@"guoguo", nil];
// 使用初始化方法定義set
NSSet *set2 = [[NSSet alloc]initWithObjects:@"guozai",@"zaiguo",@"guoguo", nil];
NSLog(@"%@,%@",set,set2);
// 獲取所有元素,並打印
NSArray * sets = [set allObjects];
NSLog(@"%@",sets);
for (int i = 0; i < [sets count]; i ++) {
NSLog(@"%@",[sets objectAtIndex:i]);
}
// 獲取set中任意一個元素
NSString *str = [set anyObject];// anyObject方法並不保證隨機,一般都是第一個 元素
NSLog(@"%@",str);
// 判斷集合中是否包含某個元素
BOOL re = [set containsObject:@"guozai"];
if (re) {
NSLog(@"baohan");
}
else {
NSLog(@"bubaohan");
}
//========================================================
// NSMutableSet
// 根據已有集合創建新的集合
NSMutableSet * mulSet = [NSMutableSet setWithSet:set];
// 添加元素
[mulSet addObject:@"zaizai"];
NSLog(@"%@",mulSet);
// 刪除元素
[mulSet removeObject:@"zaizai"];
NSLog(@"%@",mulSet);
// ===================================================
// NSCountedSet 是NSMutableSet的子類,可用來計算重復次數
NSCountedSet *countedSet = [NSCountedSet setWithSet:mulSet];
[countedSet addObject:@"guozai"];
NSUInteger count = [countedSet countForObject:@"guozai"];
NSLog(@"%ld",count);
// ===================================================
// 在使用快速枚舉遍歷集合中的元素時,不能對集合裡面的元素進行增刪操作,否則會崩潰
// 數組的快速枚舉
NSMutableArray * arr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
for (NSString *str in arr) {
NSLog(@"%@",str);
// 不能增刪
}
// 字典的快速枚舉
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"guozai",@"name",@"man",@"sex",@"19",@"age", nil];
// 字典的快速枚舉遍歷字典時,遍歷的是字典的key;
for (NSString *str in dict) {
// NSString *value = [dict objectForKey:str];
// NSLog(@"%@",value);
NSLog(@"%@",str);// 打印出來的時key
}
// 集合的快速枚舉
NSMutableSet * mulSet2 = [NSMutableSet setWithObjects:@"1",@"2", nil];
for (NSString *str in mulSet2) {
NSLog(@"%@",str);
}
// =======================================================
// sortedArrayUsingSelector會創建一個新的數組,不會影響原數組的元素
// sortUsingSelector不會創建新的數組,而在原數組的基礎上調整元素的位置
// 比較方法的定義,比如下面compareByPrice方法在類中的定義
- (NSComparisonResult)compareByPrice:(Student1 *)stu
{
// 返回NSOrderedDescending==1才交換,返回其他兩個不交換
if (_price > [stu price]) {
return NSOrderedAscending;// ==-1
}
else if(_price == [stu price])
{
return NSOrderedSame;// ==0
}
else {
return NSOrderedDescending;
}
}
NSArray *sortedArray = [students sortedArrayUsingSelector:
@selector(compareByPrice:)];//小括號內是方法名
// 在原數組裡面排序用sortUsingSelector@selector()方法
for (Student1 * stu in sortedArray) {
NSLog(@"%@",stu);
}
// 第一步:在model類中定義比較方法
// 第二步: 給數組發送排序消息
// 默認是升序
================================================================================
NSLog的description方法的重定義,打印對象時實現自己想要的輸出
// 打印對象時,會調用對象的description方法
- (NSString *)description
{
NSString *str = [NSString stringWithFormat:@"name = %@,age = %d,score = %.2f",_name ,_age,_score];
return str;
}