您的位置:首页 > 其它

进击的KFC:OC(五): 字典、集、数组排序

2015-10-31 13:56 363 查看
⼀、字典类

字典⽤于保存具有映射关系(key-value对)数据的集合。

对于“name:张三”来讲,key就是“name”,key对应的value是“张三”

⼀个key-value对认为是⼀个条⺫(Entry),字典是存储key-value对的容器。

字典类的特点

与数组不同,字典靠key存取元素。

key不能重复,value必须是对象。

key 作为钥匙,要具有唯一性 在开发中,一般使用字符串作为

key值

value 可以是一个很复杂的结构,例如字典嵌套字典等

键值对在字典中是⽆序存储的。(若是有序的,就成数组了)

字典分:不可变字典(NSDictionary)和可变字典

(NSMutableDictionary)

pragma mark ——– 不可变字典

不可变字典: (切记:不能对不可变字典进行增删)

初始化一个字典

1.用两个数组 来初始化 一个不可变字典

// key 的数组:

NSArray *keys = [[NSArray alloc]initWithObjects:@”name”,@”sex”,@”age”, nil];

// value 的数组

NSArray *values = @[@”aaa”,@”man”,@”3”];

NSDictionary *dic = [NSDictionary dictionaryWithObjects:values forKeys:keys];

2.初始化一个字典

// 使用下面这个方法初始化时:切记: 是 value key 的顺序

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@"wanglong",@"name",
@"man",@"sex",
@"3",@"age" ,nil];


把所有key取出来

NSArray *kes = [dic allKeys]; // allKeys,获取全部的key值,返回值类型是数组

取出所有value

NSArray *values = [dic allValues];

3.语法糖 key : value (和上面的2方法区分)

NSDictionary *dic = @{@"name":@"wanglong",
@"sex":@"man",
@"age":@"3"
};


根据key取出字典中对应的value

NSString *str = [dic objectForKey:@”sex”];

语法糖 取出字典key对应的value (类似数组a[1]这样,dic[key])

NSString *age = dic[@”age”];

pragma mark ——– 可变字典

切记:必须进行初始化,才能使用字典

1.初始化一个空字典

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

2.初始化的时候 给一个建议的容量

NSMutableDictionary *dic1 = [[NSMutableDictionary alloc]initWithCapacity:10];


3.初始化一个空字典

NSMutableDictionary *dic2 = [[NSMutableDictionary alloc]init];

添加键值对(注意:是 set 不是add)

[dic setObject:@”Wanglong” forKey:@”name”];

[dic setObject:@”man” forKey:@”sex”];

[dic setObject:@”3” forKey:@”age”];

删除: 把整个键值对删除了

[dic removeObjectForKey:@”sex”];

NSLog(@”%@”,dic);

// 删除全部:

[dic removeAllObjects];

NSLog(@”%@”,dic);

// 创建一个字典 姓名:王龙 性别:男 年龄:
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setObject:@"王龙" forKey:@"姓名"];
[dic setObject:@"男" forKey:@"性别"];
[dic setObject:@"18岁" forKey:@"年龄"];


// 遍历字典:
// 遍历数组
// 取出所有key
NSArray *keys = [dic allKeys];
for (int i = 0; i < [keys count]; i++) {
// 取出每一个key
NSString *key = keys[i];
// 再利用这个key取出对应的value
NSString *value = dic [key];
NSLog(@"%@ %@",key,value);
// 或者:
//        NSString *value2 = [dic objectForKey:keys[i]];
//        NSLog(@"%@ %@",keys[i],value2);
}


// 快速遍历forin时
// 遍历字典 是遍历字典中的所有key

//        for (NSString *obj in dic) {
//            NSLog(@"%@",obj);
//            // 用所有key取出value
//            NSLog(@"%@",[dic objectForKey:obj]);
//            // 结合起来
//            NSLog(@"key = %@ value = %@",obj,[dic objectForKey:obj]);
//        }


⼆、集合类

pragma mark —— 集合

存储的元素是⽆序的

存储元素必须是对象类型

iOS中⽤Set表⽰集合,分NSSet和NSMutableSet

NSSet的常⽤⽅法

创建集合对象。

NSSet *set = [NSSet alloc]initWithObjects@”1”,@”2”,nil]

获取元素个数。

[set count]

获取集合中的某个元素。

[set anyObject]

NSMutableSet的常⽤⽅法

创建集合对象。

NSMutableSet *set = [NSMutableSet set];

添加元素。

[set addObject:@”2”];

删除元素

[set removeObject:@”2”];

pragma mark ——- 数组排序

//  不可变数组
NSArray *arr = @[@"1",@"3",@"4",@"6",@"8"];
// 这种比较方法,对元素只比较第一位,                             升序
NSArray *arrnew = [arr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",arrnew);

// 可变数组
// 可变数组排序 是不需要返回值的,因为操作的是原数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"3",@"7",@"5", nil];
[array sortUsingSelector:@selector(compare:)];
NSLog(@"%@",array);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: