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];
//  }
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 字典按照key的排序

方法一 -(NSString*)stringWithDict:(NSDictionary*)dict{ NSArray*keys = [dict allKeys]; ...
  • rpf2014
  • rpf2014
  • 2017年02月09日 18:58
  • 1671

数组和字典的取值问题

1。在我们通过网路请求请求到数据后,进行解析,解析后的]
  • cai_niao_jie_di
  • cai_niao_jie_di
  • 2014年07月02日 11:47
  • 925

C#中Dictionary字典取值

// Create a new dictionary of strings, with string keys. // Dictionarystring, string>...
  • u010026901
  • u010026901
  • 2014年03月18日 13:16
  • 3443

python 字典中取值的两种方法

a={'name':'tony','sex':'male'}获得name的值的方式有两种print a['name'],type(a['name']) print a.get('name'),type...
  • sinat_21302587
  • sinat_21302587
  • 2017年06月19日 10:16
  • 7638

Python的字典get方法:从字典中获取一个值

从字典中获取一个值,问题:  你需要从字典中获得一个值,不要处理在字典里找不到你所需要的键值的异常。那就是字典的get方法。  如果你有一个字典,d = {'key':'value'}    ...
  • cnmilan
  • cnmilan
  • 2013年03月26日 20:59
  • 31345

OC中的字典以及常用方法

#import int main(int argc, const char * argv[]) {     //创建一个字典     //初始化     NSDi...
  • li_xiaomo
  • li_xiaomo
  • 2014年10月16日 20:56
  • 2292

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

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

根据字典中值的大小,对字典的项排序

对字典排序比如学生成绩 {‘Lilei’: 63, ‘wang’: 78, ‘hanmeimei’: 90} 根据学生成绩计算排名一般情况首选sorted()函数或者sort方法第一种方法:用zi...
  • akonkoo
  • akonkoo
  • 2016年12月13日 14:00
  • 1814

如何根据字典中值的大小,对字典中的项排序

实际案例某班英语成绩以字典形式存储为{‘Li’:79, ‘Jim’:88, ‘Lucy’:92, …},根据成绩高低,计算学生排名。 这里我们将利用内置函数sorted对学生的英语成绩排名。...
  • u013058162
  • u013058162
  • 2017年07月23日 14:42
  • 792

iOS开发笔记之元素为字典的数组,按元素的value排序

NSSortDescriptor *des = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES]; NSArray *s...
  • zzyeeaa
  • zzyeeaa
  • 2017年10月10日 14:50
  • 222
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC之字典的取值及值的排序
举报原因:
原因补充:

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