博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习iOS【3】数组、词典和集合
阅读量:6471 次
发布时间:2019-06-23

本文共 3987 字,大约阅读时间需要 13 分钟。

一、数组

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 
@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 
#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]; }}
 

转载地址:http://ebvko.baihongyu.com/

你可能感兴趣的文章
多线程编程之Windows环境下创建新线程
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
js滚动加载到底部
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
Java Web 高性能开发
查看>>
初识Scala反射
查看>>
第三十九天
查看>>
Redis详解
查看>>
论程序员加班的害处
查看>>
codeblocks快捷键
查看>>
基于HTML5的WebGL设计汉诺塔3D游戏
查看>>
WPF资料链接
查看>>
再次更新
查看>>
mysql的数据类型int、bigint、smallint 和 tinyint取值范围
查看>>
Python算法(含源代码下载)
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
查询指定名称的文件
查看>>