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

总结一下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;
}


你可能感兴趣的:(ios开发,Foundation)