学习iOS【3】数组、词典和集合

简介:

一、数组

1.不可变数组NSArray

  • arrayWithObjects:使用一组对象作为元素创建不可变数组,注意数组的最后一个值需要指定为nil,用来表示参数的结束,但是nil并不会存储在数组中。
  • objectAtIndex:获取指定索引位置的数组元素。
  • @[elm1,elm2….elmn]:另外一种创建数组的简便方式,不需要以nil作为结尾元素;
  • array[index]:另外一种获取指定索引位置元素的方式。
  • count:数组中元素个数。
 
复制代码
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*不可变数组*/
        //创建不可变数组 方式一
        NSArray *arr=[NSArray arrayWithObjects:@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日",nil];
        for(int i=0;i<[arr count];i++){
            NSLog(@"%@",[arr objectAtIndex:i]);
        }
        //创建不可变数组 方式二
        NSArray *arr1=@[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日"];
        for(int i=0;i<[arr1 count];i++){
            NSLog(@"%@",arr1[i]);
        }
    }
}
复制代码

2.可变数组NSMutableArray

  • NSMutableArray array方法创建空的可变数组,数组元素个数未定,可以随着需要增长;
  • addObject:向可变数组结尾添加元素;
  • insertObject:obj atIndex:i :将对象obj插入数组的第i个元素。
  • removeObjectAtIndex:i  删除数组中第i个元素。
  • replaceObjectAtIndex:i withObject:obj 将数组中序号为i的对象用obj替换。
  • 使用NSLog格式化%@可以显示整个数组,它实际上会调用每个元素的description方法。
复制代码
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*可变数组*/
        NSMutableArray *marr=[NSMutableArray array];
        for (int i=0; i<3; i++) {
            marr[i]=@(i+1);
        }
        [marr addObject:@(4)];
        for (int i=0; i<[marr count]; i++) {
            NSLog(@"%@",marr[i]);
        }
        NSLog(@"%@",marr);
     }
}
复制代码

 

二、词典对象(dictionary)

词典也有两种类型:不可变词典NSDictionary和可变词典NSMutableDictionary。

1.不可变词典NSDictionary

  • NSDictionary dictionaryWithObjectsAndKeys:创建不可变词典,参数是值-键对组合(注意顺序),以nil结尾。
  • allKeys:返回一个数组包含词典中的所有键;
  • count:返回词典中的记录数;
  • objectForKey:返回key的值对象。
 
复制代码
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*不可变词典*/
        NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"学生",@"1",@"教师",@"2", nil];
        for (NSString *key in dic) {
            NSLog(@"key:%@ value:%@",key,[dic objectForKey:key]);
        }
     }
}
复制代码

2.可变词典NSMutableDictionary

  • NSMutableDictionary dictionary:创建一个可变词典;
  • setObject:forKey:把键值对添加到可变词典中;
  • removeAllObjects:删除词典中所有的记录;
  • removeObjectForKey:删除词典中的指定键key对应的记录;
 
复制代码
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        /*可变词典*/
        //创建可变词典对象
        NSMutableDictionary *mdic=[NSMutableDictionary dictionary];
        //添加键值对
        [mdic setObject:@"学生" forKey:@"1"];
        mdic[@"2"]=@"教师";
        //显示键值对
        NSLog(@"key:1 value is:%@",[mdic objectForKey:@"1"]);//key:1 value is:学生
        NSLog(@"key:2 value is:%@",mdic[@"2"]);//key:2 value is:教师
        //删除
        [mdic removeObjectForKey:@"1"];
        NSLog(@"mdic count:%lu",[mdic count]);//mdic count:1
        [mdic removeAllObjects];
        NSLog(@"mdic count:%lu",[mdic count]);//mdic count:0
     }
}
复制代码

三、集合对象(set)

set是一组单值对象集合。

1.NSSet 不可变词典

  • setWithObjects:以一个nil为结尾的对象数组创建一个集合。
  • containObject:检测某个对象是否包含在集合中。
  • count:集合成员个数。
 

2.NSMutableSet 可变词典

  • addObject:向集合中添加对象;
  • removeObject:从集合中删除对象;
  • removeAllObjects:删除集合中所有对象;
  • unionSet:求两个集合的并集;
  • intersectSet:求两个集合的交集
 

3.实例

首先我们自定义分类为NSSet添加自定义方法print。
NSSet+Printing.h
复制代码
#import <Foundation/Foundation.h>

@interface NSSet (Printing)
-(void)print;
@end
复制代码

 

NSSet+Printing.m
复制代码
#import "NSSet+Printing.h"

@implementation NSSet (Printing)
-(void)print{
    NSLog(@"------");
    for(NSNumber *item in self){
        NSLog(@"%li",(long)[item integerValue]);
    }
}
@end
复制代码

 

main.m
复制代码
#import <Foundation/Foundation.h>
#import "NSSet+Printing.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //创建不可变集合
        NSSet *set=[NSSet setWithObjects:@"1",@"3",@"5", @"7",nil];
        //创建可变集合
        NSMutableSet *mset=[NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
        //输出
        [set print];
        [mset print];
        //成员测试
        if([set containsObject:@"7"]==YES){
            NSLog(@"set contain 7");
        }else{
            NSLog(@"set does not contain 7");
        }
        //添加对象
        [mset addObject:@"6"];
        [mset print];
        //移除对象
        [mset removeObject:@"6"];
        //求并集
        [mset unionSet:set];
        [mset print];
        [mset print];
        //求交集
        [mset intersectSet:set];
        [mset print];
     }
}
复制代码





相关文章
|
2月前
|
前端开发 开发工具 Swift
学习iOS开发的准备
准备学习iOS开发?确保有Mac和最新Xcode,先学好编程基础特别是Swift。利用Apple官方文档、在线课程和书籍作为资源。熟悉Xcode及Git,通过实践项目和开源代码积累经验。深研架构模式、核心框架和优化技巧。加入开发者社区,关注行业动态,持续学习。
32 1
|
10月前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
541 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
12月前
|
iOS开发
iOS UIKit Dynamics Demo 学习地址列表
iOS UIKit Dynamics Demo 学习地址列表
44 0
|
iOS开发
iOS 查询数组中的对象
iOS 查询数组中的对象
72 0
|
XML JSON 编解码
IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧趇OS工程中快速使用Protobuf,希望对你有帮助。
165 0
IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
142 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
存储 Unix 编译器
|
存储 算法 iOS开发
|
存储 缓存 算法
iOS底层学习——对象初始化探索
iOS底层学习——对象初始化探索
|
安全 iOS开发
iOS开发 - 字面语法之数组注意事项
iOS开发 - 字面语法之数组注意事项
77 0