首页 > 代码库 > 对象集合 二

对象集合 二

10,创建字典

字典数组也分不可修改NSDictionary和可修改NSMutableDictionary两种。

创建字典如下

NSArray *listOfObjects = [NSArray arrayWithObjects:@"Hello World", @"Bonjour tout le? monde", @"Hola Mundo", nil];

NSArray *listOfKeys = [NSArray arrayWithObjects:@"english", @"french", @"spanish", nil];

NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjects:listOfObjects

                                                        forKeys:listOfKeys];

下面是常用构造方法。

- (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt;

初始化的字典 指定的对象,key值和计数....等等

 

代码示例。

        NSArray *listOfObjects = [NSArray arrayWithObjects:@"Hello World",  @"Bonjour tout le monde", @"Hola Mundo", nil];

        NSArray *listOfKeys = [NSArray arrayWithObjects:@"english", @"french", @"spanish", nil];

        NSDictionary *dictionary2 = [NSDictionary dictionaryWithObjects:listOfObjects

                                                                forKeys:listOfKeys];

        NSLog(@"dictionary2 = %@", dictionary2);

11,访问字典属性。

接上例子。

NSString *helloWorld = [dictionary2 objectForKey:@"english"];               

 

NSLog(@"%@", helloWorld);

根据key找到相对应的值。

我们测试了,直接用下标方法也可以,且推荐。

NSString *helloWorld = dictionary2[@"english”];

12,获取个数。

其实跟数组一样啦,.count就行。dictionary2.count。

13,遍历字典。

如果用for的话。

for (NSString *s in [dictionary2 allValues]) {

NSLog(@"value: %@", s);

 

}

这里是指明allValues说明你要遍历值。换成allKeys,说明你要遍历键。

你也可以通过enumerateKeysAndObjectsUsingBlock将键和值全部遍历出来,用法前面讲过,下面是代码示例。

        NSArray *listOfObjects = [NSArray arrayWithObjects:@"Hello World", @"Bonjour tout le monde", @"Hola Mundo", nil];

        NSArray *listOfKeys = [NSArray arrayWithObjects:@"english", @"french", @"spanish", nil];

        NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:listOfObjects

                                                               forKeys:listOfKeys];

        for (NSString *s in [dictionary allValues]) {

            NSLog(@"value: %@", s);

        }

        for (NSString *s in [dictionary allKeys]) {

            NSLog(@"key: %@", s);

        }

        [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

            NSLog(@"key = %@ and obj = %@", key, obj);

 

        }];

14,操作字典内容。

比如声明字典然后往里添加值。

        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

        [dictionary setObject:@"Hello World"

                       forKey:@"english"];

        [dictionary setObject:@"Bonjour tout le monde"

                       forKey:@"french"];

        [dictionary setObject:@"Hola Mundo"

 

                       forKey:@"spanish”];

移除值。

[dictionary removeObjectForKey:@"french”];

全部移除用removeAllObjects

下面是示例。

        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

        [dictionary setObject:@"Hello World"

                       forKey:@"english"];

        [dictionary setObject:@"Bonjour tout le monde"

                       forKey:@"french"];

        [dictionary setObject:@"Hola Mundo"

                       forKey:@"spanish"];

        

        NSLog(@"OBJECTS ADDED TO DICTIONARY: %@", dictionary);

        [dictionary removeObjectForKey:@"french"];

        NSLog(@"OBJECT REMOVED FROM DICTIONARY: %@", dictionary);

        [dictionary removeAllObjects];

 

        NSLog(@"ALL OBJECTS REMOVED FROM DICTIONARY: %@", dictionary);

15,保存到文件里。

跟保存数组没啥区别,下面是代码。

        NSArray *listOfObjects = [NSArray arrayWithObjects:@"Hello World", @"Bonjour tout le monde", @"Hola Mundo", nil];

        NSArray *listOfKeys = [NSArray arrayWithObjects:@"english", @"french", @"spanish", nil];

        NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:listOfObjects

                                                               forKeys:listOfKeys];

        NSString *filePathName = @"/Users/Shared/dictionary.txt";

        [dictionary writeToFile:filePathName

 

                     atomically:YES];

16,读取。

如果你刚刚保存成功了,下面我们试着读取。

        NSString *filePathName = @"/Users/Shared/dictionary.txt";

        NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:filePathName];

 

        NSLog(@"dictionary: %@", dictionary);

注意用initWithContentsOfFile。

17,我们把set翻译成集合,创建集合。

它有这样几个初始化方法。

- (id)initWithObjects:(const id *)objects  count:(NSUInteger)cnt;

- (id)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;

- (id)initWithSet:(NSSet *)set;

- (id)initWithSet:(NSSet *)set copyItems:(BOOL)flag;

- (id)initWithArray:(NSArray *)array;

 

Description

Initializes a set with the specified objects and count

Initializes a set with the specified nil- terminated list of objects

Initializes a set using another set

Initializes a set using another set and optionally creates new copies of each object

Initializes a set with the specified objects

集合也分不可变集合NSSet和可变集合NSMutableSet

代码都简单的我懒得抄了。

        NSSet *set = [NSSet setWithObjects:@"Hello World", @"Bonjour tout le monde",@"Hola Mundo", nil];

 

        NSLog(@"set: %@",set);

18,获取个数,不废话了,用.count.

19,比较集合。

比如用两个集合。

NSSet *set1 = [NSSet setWithObjects:@"A", @"B", @"C", @"D", @"E", nil];

 

NSSet *set2 = [NSSet setWithObjects:@"D", @"E", @"F", @"G", @"H", nil];

你想看看两个集合里有没有重合的值,a数组里的值是否存在于b数组。。可以用setsIntersect,它返回一个BOOL值。例如

BOOL set2IsSubset = [set2 isSubsetOfSet:set1];

是否是子集用isSubsetOfSet

isEqualToSet测试两个集合是否相同。

某个对象是否存在于集合里面,用containsObject找出来。

代码示例

        NSSet *set1 = [NSSet setWithObjects:@"A", @"B", @"C", @"D", @"E", nil];

        NSSet *set2 = [NSSet setWithObjects:@"D", @"E", @"F", @"G", @"H", nil];

      

        NSLog(@"set1 contains:%@", set1);

        

        NSLog(@"set2 contains:%@", set2);

        BOOL setsIntersect = [set1 intersectsSet:set2];

        

        BOOL set2IsSubset = [set2 isSubsetOfSet:set1];

        BOOL set1IsEqualToSet2 = [set1 isEqualToSet:set2];

        BOOL set1ContainsD = [set1 containsObject:@"D"];

 

        NSLog(@"setsIntersect = %i, set2IsSubset = %i, set1IsEqualToSet2 = %i, set1ContainsD = %i", setsIntersect, set2IsSubset, set1IsEqualToSet2, set1ContainsD);

20,遍历集合。

用for遍历。

        for (NSString *s in [set1 allObjects]) {

            NSLog(@"value: %@", s);

 

        }

用block

[set2 enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {

            NSLog(@"obj = %@", obj);

 

        }];

对每个原色都执行一个方法

[set2 makeObjectsPerformSelector:@selector(description)];

排倒序了。

具体代码。

        NSSet *set = [NSSet setWithObjects:@"Hello World", @"Bonjour tout le monde", @"Hola Mundo", nil];

        for (NSString *s in [set allObjects]) {

            NSLog(@"value: %@", s);

        }

        [set enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {

            NSLog(@"obj = %@", obj);

        }];

        [set makeObjectsPerformSelector:@selector(description)];

        

 

        NSLog(@"%@",set);

21,设置内容。

添加内容。

[set addObject:@"Hello World”];

删除内容

[set removeObject:@"Bonjour tout le monde”];

删除所有内容。

removeAllObjects

 

示例代码。

        NSMutableSet *set = [[NSMutableSet alloc] init];

        [set addObject:@"Hello World"];

        [set addObject:@"Bonjour tout le monde"];

        [set addObject:@"Hola Mundo"];

        NSLog(@"Objects added to set:%@", set);

        [set removeObject:@"Bonjour tout le monde"];

        NSLog(@"Object removed from set:%@", set);

        [set removeAllObjects];

 

        NSLog(@"All objects removed from set:%@", set);