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

原创 2015年11月19日 09:37:22


字典用于保存具
有映射关系(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];
//  }
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

OC中字典的操作方法 集合 动态排序

一.不可变字典 NSDictionary 1.获取字典元素的个数 NSUInteger count = dic.count; NSLog(@"count = %lu",count); 2.获取所有Ke...

OC总结----类的方法.继承.NSString类的常用方法.NSMutableString 类的方法.数组类.字典类.block语法以及数组排序高级.属性.category (分类,类目).延展,等

1.在加号方法中不能使用实例变量,shi'il
  • RC_cong
  • RC_cong
  • 2014年08月17日 21:19
  • 756

OC第五天-字典,集合,数组排序

字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序#import //定义一个排序的条件的函数 NSInteger sort1 (id s1, id s2, void ...

OC第五天:字典、集、数组排序

⼀、字典类 字典⽤于保存具有映射关系(key-value对)数据的集合。 ⼀个key-value对认为是⼀个条⺫(Entry),字典是存储key-value 对的容器。 字典类的特点 与数组不...

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

⼀、字典类 字典⽤于保存具有映射关系(key-value对)数据的集合。 对于“name:张三”来讲,key就是“name”,key对应的value是“张三” ⼀个key-value对认为是⼀个...

ObjectC----字典类和集合类以及快速枚举和OC中的数组排序

// Create By 郭仔  2015年04月01日20:06:36 // 不可变字典     // 字典是适用于存放键值对的一种集合,里面的元素必须是对象类型   ...

OC习题 -- 切分字符串 处理色值和名称 (知识点: 字典,枚举,数组,字符串)

/* 处理工程文件crayons.txt中的文本信息,文本内容是关于颜色的,每行都是一 个颜色的信息,例如:Almond #EED9C4,前⼀一个字符串是颜色的名称,后一 个字符串是颜⾊色的16进制色...

OC字典中添加相同key值需要注意的问题

OC字典中添加相同key值需要注意的问题

js中对象属性值排序(字典倒排序)

[TOC] 教女朋友前端js的过程中发现好多书里面都没有讲倒排序,网上搜了也没有,故此新开一文讲一下。sort函数先说一下sort函数:var a=[3,2,5,7,3,6,8,9,1,2]; do...

python中字典按键或键值排序

http://blog.csdn.net/xsj_blog/article/details/51847831 字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC之字典的取值及值的排序
举报原因:
原因补充:

(最多只允许输入30个字)