NSDictionary 的用法

字典:NSDictionary

 

字典就是關鍵字及其定義(描述)的集合。Cocoa中的實現字典的集合NSDictionary在給定的關鍵字(通常是一個NSString)下存儲一個數值(可以是任何類型的對象)。然後你就可以用這個關鍵字來查找相應的數值。
不同於數組,字典(也被稱爲散列表或關聯數組)使用的是鍵查詢的優化存儲方式。它可以立即找出要查詢的數據,而不需要遍歷整個數組進行查找。
可使用dictionaryWithObjectsAndKeys來創建字典
查詢字典的值:objectForKey
NSMutableDictionary的dictionary方法可以創建一個可變字典,也可以使用dictionaryWithCapaticy:。
使用 setObject:forkey: 方法添加字典元素,如果關鍵字已存在,則用新植替換舊值。
類似的,NSMutableDictionary類允許隨意添加或刪除字典元素。
添加元素:setObject:forkey:
刪除元素:removeObjectForKey:
Example:

 

1 //
2  //MyClass.h
3  //FoundationKit4
4  //
5  //Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import <Cocoa/Cocoa.h>
10
11
12@interface MyClass : NSObject
13{
14NSString *firstName;
15NSString *lastName;
16}
17
18
19- (void)setFirstName:(NSString *)m_firstName;
20- (NSString *)firstName;
21
22- (void)setLastName: (NSString *)m_lastName;
23- (NSString *)lastName;
24
25
26@end

 

 

 

1 //
2 // MyClass.m
3 // FoundationKit4
4 //
5 // Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import "MyClass.h"
10
11
12@implementation MyClass
13
14- (void)setFirstName:(NSString *)m_firstName{
15
16firstName = m_firstName;
17}
18- (NSString *)firstName{
19return firstName;
20}
21
22- (void)setLastName: (NSString *)m_lastName{
23lastName = m_lastName;
24}
25- (NSString *)lastName{
26return lastName;
27}
28
29
30- (NSString *)description
31{
32 if (firstName == nil || lastName == nil) {
33return @"NoName found.";
34} else {
35return [NSString stringWithFormat:@"%@%@",
36firstName,lastName];
37}
38
39}
40
41@end

 

 

 

1
6
7 #import <Foundation/Foundation.h>
8 #import "MyClass.h"
9
10int main (intargc, const char * argv[]) {
11NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
12
13// 創建字典:dictionaryWithObjectsAndKeys:
14MyClass *my1= [MyClass new];
15MyClass *my2= [MyClass new];
16MyClass *my3= [MyClass new];
17MyClass *my4= [MyClass new];
18
19NSDictionary *myClassDict;
20myClassDict = [NSDictionary dictionaryWithObjectsAndKeys:
21my1, @"my1",
22my2, @"my2",
23my3, @"my3",
24my4, @"my4",nil];
25// 獲取值 objectForKey
26MyClass *sub= [myClassDict objectForKey: @"my3"];
27if (sub == nil) {
28exit(1);
29}
30[sub setFirstName:@"Elf"];
31[sub setLastName:@"Sundae"];
32
33NSLog(@"修改數據:%@",sub);
34
35// 遍歷字典
36NSLog(@"***遍歷字典myClassDict如下:");
37for (id key in myClassDict)
38{
39NSLog(@"key:%@ ,value: %@",key,[myClassDictobjectForKey:key]);
40}
41NSLog(@"***遍歷字典myClassDict結束。");
42
43// MARK: *** 添加新元素 ***
44 // NSDictionary無法添加或刪除元素,可以使用NSMutableDictionary.
45NSMutableDictionary *myNewDict= [NSMutableDictionary dictionary];
46// 將原有字典添加到新字典的一對元素
47//[myNewDictsetObject:myClassDic forKey:@"舊的不可變字典myClassDic"];
48
49// 遍歷添加已有數據(原字典)
50for (id key in myClassDict)
51{
52[myNewDict setObject: [myClassDict objectForKey:key]
53forKey:key];
54}
55
56NSString *newkey= @"newKey";
57NSString *newValue= @"Thisis a new Value.";
58[myNewDict setObject:newValue forKey:newkey];
59
60// 遍歷myNewDict
61NSLog(@"***遍歷字典myNewDict如下:");
62for (id key in myNewDict)
63{
64NSLog(@"key:%@ ,value: %@",key,[myNewDictobjectForKey:key]);
65}
66NSLog(@"***遍歷字典myNewDict結束。");
67
68// 刪除元素
69[myNewDict removeObjectForKey: @"newKey"];
70
71// 遍歷myNewDict
72NSLog(@"***遍歷字典myNewDict如下:");
73for (id key in myNewDict)
74{
75NSLog(@"key:%@ ,value: %@",key,[myNewDictobjectForKey:key]);
76}
77NSLog(@"***遍歷字典myNewDict結束。");
78
79[pool drain];
80return 0;
81}

 

 

 

// 輸出結果(省略日期 時間等信息)
修改數據: Elf Sundae
***遍歷字典myClassDict如下:
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.
***遍歷字典myClassDict結束。
***遍歷字典myNewDict如下:
key: newKey ,value: This is a new Value.
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.
***遍歷字典myNewDict結束。
***遍歷字典myNewDict如下:
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章