【学习ios之路:Object-C】字典.集合.

1.不可变数据字典(NSDicionary)

字典:用来存储具有一一对应关系的数据.

一个key 对应一个 value ,key起到了唯一标示的作用,key必须是唯一的,但是一个vlaue可以对应多个key.

字典存储的是无序的元素,一对键值对组成了字典中的一个元素.

①.不可变字典初始化赋值

<span style="font-size:18px;">
  //笑笑语法
  NSDictionary *dic = @{@"name":@"zhangdan",@"age":18,@"gender":@"man"};
  //初始化
  NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                 @"放弃",@"abandon",@"对象",@"object",@"索引",@"index", nil];
  NSLog(@"%@",dictionary);
   //遍历构造器方法
  NSDictionary *dictionary1 = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"xiaozang",@"name",@"18",@"age",@"23342432",@"phone",nil];
  NSLog(@"%@",dictionary1);

</span>

②.求字典元素个数,即获取所有的key和value

<span style="font-size:18px;">
  //获取元素的个数
  NSUInteger num = [dictionary1 count];
  NSLog(@"%ld",num);
   //获取所有的key
   for (NSString *temp in [dictionary1 allKeys] ) {
        NSLog(@"%@",temp);
     }
    NSArray  *array = [dictionary1 allKeys];
    NSLog(@"%@",array);
   //根据key获取对应的value
   NSString *value = [dictionary1 objectForKey:@"age"];

</span>

③.遍历字典:取得key,和value

<span style="font-size:18px;">
   //字典遍历:取得的是key,然后根据key再获取对应的value
      for (NSString *temp in [dictionary1 allKeys] ) {
                 NSString *value = [dictionary1 objectForKey:temp];
                NSLog(@"%@ = %@",temp,value);
      }

</span>

④.其他一些操作

<span style="font-size:18px;">//1.判断是否和另一个字典相同
- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;

//2.同过字典中所有的vlaue给所有的keys排序,用到block语法.
- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr
</span>

2.可变字典(NSMutableDictionary)

可变字典继承不可变字典,继承不可变字典内的方法,同时增加了删除,添加,修改操作.

①.创建字典对象,初始化赋值操作

<span style="font-size:18px;">
 //笑笑语法
 NSMutaleDicrtionary *mut = [@{@"name":@"zhangdan",@"age":12} mutableCopy];
 //初始化
  NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];

  //便利构造器方法
  NSMutableDictionary *mutable = [NSMutableDictionary dictionaryWithCapacity:1];

  //便利构造器创建对象方法
 NSMutableDictionary *mutable1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:
  @"21",@"age",@"asdf",@"name",nil]; NSLog(@"%@",mutable1);</span><p><span style="font-size:18px;">
</span></p><span style="font-size:18px;">

</span>

②向可变数据字典中,添加,删除,修改元素

<span style="font-size:18px;">
  //往字典中添加元素.
  [mutable setObject:@"13" forKey:@"age"];
  NSLog(@"%@",mutable);
  //根据key删除对应的元素
  [mutable removeObjectForKey:@"age"];
  NSLog(@"%@",mutable);
  //修改key对应的value
  [mutable setObject:@"1sad8" forKey:@"age"];

  NSLog(@"%@",mutable);
  [mutable setValue:@"17" forKey:@"age"];

  //移除所有的元素
  [mutable removeAllObjects];

  //将字典中原来的元素替换为另一个字典中的元素
  [mutable setDictionary:otherDictionary];
 
  //快速根据key取出对应的value;
  NSString *s1 = dictionary[@"name"];//[dictionary objectForKey:@"name"]
  NSLog(@"%@",s1);
  NSString *s2 = dictionary[@"age"];
  NSLog(@"%@",s2);

</span>

3,集合(NSSet和NSMutableSet)

1).集合:无序,不能添加重复元素

2).可变集合是不可变集合的子类,包含父类的所有方法,同时可变集合增加了删除,修改,添加操作.

①不可变集合常见操作.

<span style="font-size:18px;">
   //初始化方法
   NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil];

   //便利构造器方法
   NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil];

<span style="font-size:18px;">  //计算元素个数 NSUInteger num = [set count]; NSLog(@"%ld",num); NSLog(@"%@",set);
  //获取集合中的元素 NSLog(@"%@",[set anyObject]);
  //快速遍历 for (NSString *temp in set) { NSLog(@"%@",temp); }

  //判断集合是否包含某对象
  BOOL isContain = [set containsObject :@"dd"];

  //判断两个集合是否相同
  - (BOOL)isEqualToSet:(NSSet *)otherSet;

  //判断集合中的子串是否和传入的相同,
  - (BOOL)isSubsetOfSet:(NSSet *)otherSet;
</span>

</span>

②.可变集合操作

<span style="font-size:18px;">
     //创建对象
     NSMutableSet *set = [NSMutableSet setWithObjects:@"aa",@"bb",@"cc",@"dd",nil];
     NSMutableSet *set1 = [NSMutableSet setWithCapacity:1];
<span style="font-size:18px;">    //添加
    [set addObject:@"rrr"]; NSLog(@"%@",set);
    //删除
    [set removeObject:@"aa"]; NSLog(@"%@",set);
    //删除所有
    [set removeAllObjects]; NSLog(@"%@",set);
    //添加集合中的元素,通过数组
    [set addObjectsFromArray:array]; 

    //将集合中的元素替换成另一个集合的元素
    [set setSet:otherSet];4.NSCountedSet</span></span><p><span style="font-size:18px;">    NSCountedSet的父类是NSMutableSet,所以继承了NSset和NSMutableSet里面的方法.</span></p>
 

常见操作

<span style="font-size:18px;">  NSCountedSet *countSet = [NSCountedSet setWithObjects:
                                        @"aa",@"bb",@"cc",@"dd",@"ee",@"aa",nil];
  //数组中的重复个数
  NSCountedSet *count = [[NSCountedSet alloc] initWithCapacity:1];
<span style="font-size:18px;">  NSUInteger count = [countSet countForObject:@"aa"]; NSLog(@"%ld",count);</span>

</span>

//添加元素

- (void)addObject:(id)object;

//移出对象

- (void)removeObject:(id)object;

例题:有100个数,每个数取值范围为20 - 55 ,找出其中重复的数,重复次数.

<span style="font-size:18px;">
     NSCountedSet *countSet = [NSCountedSet setWithCapacity:100];
        for (int i = 0;i < 100; i++) {
            int random = arc4random() % (55 - 22 + 1) + 20;
            printf("%d ",random);
            [countSet addObject:@(random)];
        }

        for (NSNumber *num in countSet) {
          NSUInteger count = [countSet countForObject:num];//记录重复的次数.
            if (count > 1) {
                NSLog(@"%d,重复次数为%ld",[num intValue],count);
            }
      }

</span>

总结:字典,集合.数组.的相同点和不同点

<span style="font-size:18px;">        /**
         *
         *  相同点:都属于collection(集合),用来存储多个对象,并不限制对象的类型
         *  不同点:
         *   1.作用:
         *   数组管理有序的集合
         *   字典管理具有一一对应关系的数据集合
         *   集合管理无序并且互异性的元素的集合.
         *   2.特点
         *   数组:有序,并且元素可以重复.
         *   字典:无序,每一个元素都是一对键值对,一个key只能对应一个value,但是一个value可以对应多个key,key是唯一的.
         *   集合:无序,互异性(元素不能重复,但会记录重复次数.)
         *   3.取值方式:
         *   数组:通过下标获取对应元素.
         *   字典:通过key获取对用的value.
         *   集合:随机取值.anyObject,集合的效率最大化.
         *   4.快速遍历:for in遍历时不能修改遍历的集合
         *   数组:遍历出来的时数组中的元素
         *   字典:遍历出来的是字典中的key,通过key,取出对应的value值.
         *   集合:遍历出集合中的元素.
         *   5.创建对象的方法 1.初始化方法         2.便利构造器
         *    数组 :  initWithObjects:         arrayWithObjects:
         *    字典 :  initWithObjectsAndKeys:  dictionaryWithObjectsAndKeys:
         *    集合 :  initWithObjects:         setWithObjects:
         */

</span>
时间: 2024-10-15 00:17:28

【学习ios之路:Object-C】字典.集合.的相关文章

【学习ios之路:Objective-C】数组,字符串,字典的总和练习

①.实现方法:13个人,3个人一组,用一个大数组来管理每一个分组. //1.原数组 NSArray *array = @[@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13]; //2.原数组个数 NSInteger count = [array count]; //3.新建一个可变的数组1. NSMutableArray *newArray = [[NSMutableArray alloc] init]; //4.循环 for (NSInteger i = 0

《从零开始学Swift》学习笔记(Day 16)——字典集合

原创文章,欢迎转载.转载请注明:关东升的博客  Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的. 字典声明与初始化 Swift字典类型是Dictionary,也是一个泛型集合. 在声明一个Dictionary类型的时候可以使用下面的语句之一. var studentDictionary1: Dictionary<Int, String>

Swift 2.0学习笔记(Day 16)——字典集合

?? 原创文章,欢迎转载.转载请注明:关东升的博客   Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的. 字典声明与初始化 Swift字典类型是Dictionary,也是一个泛型集合. 在声明一个Dictionary类型的时候可以使用下面的语句之一. var studentDictionary1: Dictionary<Int, Str

【学习ios之路:UI系列】iOS沙盒机制,文件读取,归档与反归档

1.IOS中的沙盒机制 IOS中的沙盒机制是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件等. 特点: 1.每个应用程序都在自己的沙盒内 2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 3.应用程序向外请求或接收数据都需要经过权限认证 每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.如下图

【学习ios之路:UI系列】NSPredicate相关用法

NSPredicate NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式. 它的查询语言就像SQL的WHERE和正则表达式的交叉一样,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件. NSPredicate的几种用法 ①常见形式 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'zhangdan'"]; //注意:如果谓词串中的文本块未被引用,则被看

【学习ios之路:Object-C】类与对象

1.面向对象和面向过程概念 1).面向过程 面向过程:以过程为核心,注重的是完成事件的详细步骤,一步一步如何实现. 2).面向对象 面向对象:以事物为核心,注重的是参与该事件的事物应该具备的功能.所以完成该事件只是事物所有功能中的一个功能. 2.类与对象 类: 类是具有相同特征以及行为的事物的抽象,它是一个抽象的概念,不具体. 对象: 类的实例.类的具体体现.生活中的万物都是对象. 3.OO与OOP OO:(Object Oritented)面向对象 OOP:(Object Oriented P

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

【学习ios之路:UI系列】实现轮播图效果(UIImageView,UIScrollView,UIPageControl,NSTimer相结合)

实现效果,在不点击的情况下,自定滚动,点击时,停止.如下图 部分代码如下: //调用NSTimer方法,自定计时 - (void)autoScroll { self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self  selector:@selector(scrollToRight) userInfo:nil repeats:YES]; } //实现触发方法 - (void)scrollToRight { [UIVie

【学习ios之路:C语言】指针

指针 1.指针定义,即简单用法. <span style="font-size:14px;"> //指针变量:专门用来存储地址的变量. int *p = NULL;//NULL == 0 /** * 变量定义时: * (int *):指针类型 * p: 变量名 NULL:初始值. * NULL(指向了一个无效的区域) * *的作用: 告诉编译器,后面变量是指针变量,用来存储地址. * int作用: 1.当通过指针变量取数据时,一次性读取几个字节的数据. 2.当指针变量+1时