iOS开发之OC基础————NSArray、NSSet、NSDictionary

来源:互联网 发布:java thread sleep0 编辑:程序博客网 时间:2024/05/22 13:33

总结一下Foundation框架中常用的三个类:NSArray、NSSet、NSDictionary的常用属性和方法

NSArray、NSSet、NSDictionary只能存储OC对象,不能存储基本数据类型(int , char , double , float , BOOL , enum(枚举))和结构体类型。实际使用时可以将基本数据类型转换成NSNumber类型。


NSArray:OC中的数组,其中的数据有序排列,可有重复数据,容量大小固定,NSMutableArray是其子类,容量大小可变。他们能存储不同类型的OC对象,但是不能存储nil和基本数据类型的数据以及结构体类型的数据。

//数组的创建void arrayCreate(void) {     //表示创建一个有两个元素的数组,nil代表数组结束的标记,并不是数组的元素    NSArray *array = [[NSArray alloc]  initWithObjects:@"kathy", @"Tom", nil];        //NSArray *array1 = [NSArray arrayWithArray:array]; //[NSArray alloc] initWithArray]            Person *p = [[Person alloc] init];        p.age = 10;        //OC数组中可以存储不同类型的OC对象,不能存储基本类型数据。    char *str = "hello";    NSArray *array1 = [NSArray arrayWithObjects:@"kathy", p, nil];        //NSArray类中的description方法分别调用了每一个元素所属类的description方法。    //NSLog(@"%@", array1);            //新语法创建的OC数组-->编译器行为自动转化    NSArray *array2 = @[@"kathy", @"hello", p];        //访问数组元素        NSLog(@"数组的第一个元素:%@", [array2 lastObject]);        NSLog(@"数组的第二个元素:%@", [array2 objectAtIndex:1]);            //新语法-->自动转化成objectAtIndex的方法调用    NSLog(@"数组的第二个元素:%@", array2[1]);        }//数组的遍历void arrayEnumerate(void) {            Person *p = [[Person alloc] init];        p.age = 10;        NSArray *array = @[@"kathy", @"hello", p];    //1.普通遍历//    for (NSUInteger i = 0; i < array.count; i++) {//        //        NSLog(@"%lu:%@", i, array[i]);//    }    //2.快速遍历:效率更高    for (id object in array) {                NSInteger i = [array indexOfObject:object];        NSLog(@"%li:%@", i, object);    }        //3.block遍历    }void mutableArrayUse(void) {        NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:5];    [mArray addObject:@"kathy"];    [mArray addObject:@"hello"];    [mArray addObject:@"kathy"];        NSLog(@"count:%lu",mArray.count); //数组实际元素的个数,capacity:预留的空间        //NSMutableArray *mArray2 = @[@"kathy", @"Tom"]; //通过新语法创建的数组类型为NSArray,即不可变数组,不能调用NSMutableArray中新增的方法        //[mArray2 addObject:@"work"];        NSArray *array = @[@"kathy", @"Tom"];        NSMutableArray *mArray2 = [NSMutableArray arrayWithArray:array];        [mArray2 addObject:@"work"];        NSLog(@"%@", mArray2);        //插入元素    [mArray2 addObject:@"tengteng"];        //删除元素    [mArray2 removeObject:@"tengteng"];}

NSSet和NSArray的不同:其中的数据无序排布,不能有相同的数据存储在其中。

NSMutableSet是其子类,是可变存储空间的集合。

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {                //1.Set的创建        NSSet *s1 = [NSSet set]; //空的Set                NSSet *s2 = [NSSet setWithObjects:@"kathy", @"Mark", nil];                NSArray *array = @[@"kathy", @"kathy", @"Mark"];                //数组转化为集合,其中相同个的元素会丢失        NSSet *s3 = [NSSet setWithArray:array];                NSLog(@"%@", s3);                //2.NSSet转化成NSArray        NSArray *array2 = [s3 allObjects];                //3.元素的个数        NSUInteger count = s3.count;                //4.访问Set中第一个元素        NSLog(@"%@", array[0]);                //不能使用下标来访问Set中的元素,因为其排布是无序的。//        NSLog(@"%@", s3[0]);                //随机取出Set中的某一个元素        NSLog(@"%@", [s3 anyObject]);                //如果想确定取出Set中的某一个元素,可以先将其转化为NSArray,再根据下标取出某个元素                //5.遍历Set中所有的元素        for (NSString *str in s3) {            NSLog(@"%@", str);        }                //比较NSSet和NSArray: 面试题目//        1.数组中的元素有序,Set中的元素无序//        2.数组可以重复存入相同值的对象,而Set不可以。                    }    return 0;}

NSDictionary使用键(key)——值(value)对来存储数据的,key作为元素的索引来使用,通过key来查找到对应的value。不能在NSDictionary中存在相同的键值对,NSDictionary存储的数据也是无序排布的。

NSMutableDictionary是可变存储容量的字典,是NSDictionary的子类。

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {                //练习:五个同学和相关信息        NSArray *students = @[                              @{@"name": @"jack",                                @"qq" : @"1233444",                                @"age" : @20,                                @"phoneNumber" : @[@"89089000", @"1345678", @"1233445"]                                  },                              @{@"name": @"Tom",                                @"qq" : @"1789008",                                @"age" : @30,                                @"phoneNumber" : @[@"89089001", @"1345345", @"179995"]                                  },                              @{@"name": @"Jim",                                @"qq" : @"10988444",                                @"age" : @40,                                @"phoneNumber" : @[@"899349289", @"193483988", @"1249584395"]                                  },                              @{@"name": @"Kathy",                                @"qq" : @"1213444",                                @"age" : @50,                                @"phoneNumber" : @[@"890890780", @"13494978", @"120049445"]                                  }                                                            ];                //获取到字典数组的第一个元素        NSDictionary *jack = students[0];        NSLog(@"%@", jack);                //获取到第二个同学的qq        NSDictionary *tom = students[1];        NSString *qq = tom[@"qq"];        NSLog(@"%@", qq);                //第三个同学的所有电话        NSArray *phones = students[2][@"phoneNumber"];        NSLog(@"%@", phones);                //第四个同学的寝室电话        NSString *roomPhone = students[3][@"phoneNumber"][2];        NSLog(@"%@", roomPhone);                                        //1.创建NSDictionary        //存储一个人的相关信息:name, address, qq                NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"kathy", @"name", @"hangzhou", @"address", @"213456", @"qq", nil];                NSLog(@"%@", dict1);                //新语法        NSDictionary *dict2 = @{                               @"name" : @"kathy",                               @"address" : @"Hangzhou",                               @"qq" : @"13344"                               };                //2.访问元素        //通过Key获取值        NSString *object = [dict2 objectForKey:@"name"];        NSLog(@"%@", object);                //新语法:key相当于查找元素的索引        NSString *object1 = dict2[@"name"];        NSLog(@"%@", object1);                        //3.字典的遍历        NSArray *keys = [dict2 allKeys]; //获取到所有的key        for (NSInteger i = 0; i < dict2.count; i++) {                        NSString *key = keys[i];                        NSString *object = dict2[key]; //根据key获取值                        NSLog(@"%@:%@", key, object);                    }                for (NSString *key in dict2) {                        NSLog(@"%@:%@", key, dict2[key]);                    }                //4可变字典        NSMutableDictionary *dict3 = [NSMutableDictionary dictionaryWithCapacity:3];                //字典中不允许出现key值相同的键值对        [dict3 setObject:@"kathy" forKey:@"name"];        [dict3 setObject:@"hangzhou" forKey:@"address"];        [dict3 setObject:@"Tom" forKey:@"name"];                NSLog(@"%@", dict3);                //用新语法创建的字典是一个不可变字典        NSDictionary *dic5 = @{                                @"name" : @"kathy",                                @"address" : @"Hangzhou",                                @"qq" : @"13344"                                };        //[dic5 setObject:@"135889" forKey:@"tel"];        NSMutableDictionary *dic6 = [NSMutableDictionary dictionaryWithDictionary:dic5];                    }    return 0;}


0 0
原创粉丝点击