关闭

OC之字典的取值及值的排序

标签: OC编程Dictionary
385人阅读 评论(0) 收藏 举报
分类:


字典用于保存具
有映射关系(key-value)数据的集合
一个key-value对认为是一个项目(Entry),字典是存储key-valuez的容器
1.字典靠key存取元素
2.key不能重复  value必须是对象(如果不是对象NSNumberNSValue
3.键值对在字典中是无序存储的
4.字典分不可变字典(NSDictionary)和可变字典(NSMUtableDictionary
5.不可变字典,字典一旦创建,键值不可更改,不可添加,不可删除。仅能读取keyvalue
6.字典中键值是成对的,不能出现单数元素个数。

//        不可变字典初始化
       
NSDictionary *d = [[NSDictionary alloc]initWithObjectsAndKeys:@"",@"自然1",@"",@"自然2",@"",@"自然3",@"",@"自然4", nil];
//        获取字典元素(键值对)个数
       
NSUInteger count = d.count;
       
NSLog(@"%lu",count);
//        获取所有key
        NSArray *a = d.allKeys;
        for (int i = 0; i < d.count; i++) {
           
NSLog(@"a[%d] = %@",i,a[i]);
        }
//        所有value
        NSArray *a1 = d.allValues;
       
for (int i = 0; i < d.count; i++) {
           
NSLog(@"a1[%d] = %@",i,a1[i]);
        }
//        通过key值查询value
       
NSString *q = [d valueForKey:@"自然1"];
       
NSLog(@"自然1 = %@",q);
       
       
NSString *q1 = [d valueForKey:@"自然2"];
        NSLog(@"自然2 = %@",q1);
//添加键值对
//自然3就是key 雨就是Value
[n setObject:@"" forKey:@"自然5"];
[n setValue:@"" forKey:@"自然6];
//修改key对应的Value
[n setValue:@"" forKey:@"自然2"];
//删除键值对
[n removeObjectForKey:@"自然1"];
//for循环遍历所有键值对  1.
NSArray *n3 = n.allKeys;
NSArray *n4 = n.allValues;
for (int i = 0;i < n.count; i++) {
NSLog(@"%@ %@",[n3 objectAtIndex:i],[n4 objectAtIndex:i]);
}
//for循环遍历所有键值对  2.
NSArray *n5 = [n allKeys];
for (int i = 0; i < n.count; i++) {
NSLog(@"%@,%@", n5[i], [n valueForKey:n5[i]]);
}
setValue:····forKey:
当字典中没有这个key时,setValueforKey就是添加新的键值对
当字典中有这个key时,setValueforKey就是修改当前的键值对
问题:加入一个不知道元素类型和个数的集合,如何快速枚举
//id类型格式转化符%@  id(通用类型)泛指所有对象类型,不具体指哪一种类型
 for (id ee in qs) {
   NSLog(@"%@",ee);
 }
iOS中也有表示集合的类,叫做NSSet
  集合的特点:
与数学中的集合一样,集合中元素是唯一的(不能重复)
集合中元素是无序存储的
集合中元素类型必须是对象类型(如果基本数据类型需要通过NSNumberNSValue转化为对象类型)
集合的分类:NSSetNSMutableSet
NSSet *set = [[NSSet alloc]initWithObjects:@"苹果",@"",@"香蕉",@"橘子", nil];
//获取集合元素个数,重复的元素会被覆盖,只算一个
NSLog(@"%lu",set.count);
//获取集合中的某个对象,如果集合中有此元素,就返回,没有就返回nil
NSString *y = [set member:@"ee"];
//for (int i = 0; i <  j.count; i++) {
NSLog(@"%@",y);
//}
//containObject 判断集合中是否有这个元素
BOOL is = [set containsObject:@"香蕉"];
NSLog(@"%d",is);

NSArray *all = [set allObjects];
for (int i = 0; i < all.count; i++) {
NSLog(@"%@",all[i]);
}
//anyObject 返回集合中其中一个元素,不保证每次运行的结果都是随机的(第一次是随机的,以后都是固定的)
NSLog(@"%@", [set anyObject]);
NSMutableSet *mu = [[NSMutableSet alloc]initWithObjects:@"banana",@"bear",@"apple",@"orange", nil];
//添加元素
[mu addObject:@"grape"];
//删除元素
[mu removeObject:@"bear"];

NSCountedSet *c = [[NSCountedSet alloc]initWithObjects:@"banana",@"bear",@"apple",@"orange", nil];
NSLog(@"%lu",c.count);
//countForObject计算某个元素在集合内出现的次数
NSInteger c1 = [c countForObject:@"bear"];
NSLog(@"%lu",c1);
       

NSArray *quick = [NSArray arrayWithObjects:@"生日礼物",@"匆匆那年",@"出卖",@"犯贱", nil];
//右边是数组(集合),左边是集合中元素的类型
for (NSString *str in quick) {
NSLog(@"str = %@",str);
}
//字典的快速枚举
NSDictionary *qu = [NSDictionary dictionaryWithObjectsAndKeys: @"张杰",@"谢娜",@"邓紫棋",@"艾莉",nil];
for (NSString *se in qu) {
NSLog(@"%@",se);
NSLog(@"%@",[qu valueForKey:se]);
}
//快速枚举集合
NSSet *qs = [NSSet setWithObjects:@"那英",@"好声音",@"何炅", @"快乐大本营",nil];
for (NSString *bb in qs) {
NSLog(@"%@",bb);
}
排序:
for (int i = 0; i < sortArray.count;i++) {
   for (int  j = 0; j < sortArray.count - 1 - i; j++) {
 //1.
   NSNumber *num1 = [sortArray objectAtIndex:j];
   int n1 = [num1 intValue];
   NSNumber *num2 = [sortArray objectAtIndex:j+1];
   int n2 = [num2 intValue];
   if (n1 > n2) {
   [sortArray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
     }
//2.(简化方法)
//   if ([sortArray[j] intValue] > [sortArray[j+1]intValue]) {
//    [sortArray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
//  }
  }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28295次
    • 积分:798
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类