在Object-c中,字典(KEY/VALUE)使用NSDictionary 和NSMutableDictionary(可变长)。使用语法如下:
[cpp]
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key1",nil];//注意用nil结束
取元素的方法:
[cpp]
NSString *value = [myDictionary objectForKey:@"key1"];
该写法过于繁复。所以我将C++中的map类进行了封装
[cpp]
#ifndef Discuz2_Maps_h
#define Discuz2_Maps_h
#include
大家看到,这里使用的定义比较器的方式来指定当KEY的类型是NSString时的比较方式。而这样做的原因是当查找某KEY(NSString类型)时,这时在map比较器中的数据会出现字符长度变长的情况,且变长的那部分内容为乱码。这会造成查不到相应的结果。当然这样做会不会造成性能上的损失,目前还没测试过。感兴趣的朋友可以帮助测试一下。
下面来看一下具体用法。
实例化对象并添加数据:
[cpp]
Dict dict;
dict.add(@"代震军1", @"111111").add(@"代震军2", @"222222");
或用下面方式:
[cpp]
NSArray *array = [[NSArray alloc] initWithObjects:
@"One", @"1", @"Two", @"2", @"Three", @"3", @"Four", @"4",nil];
Dict dictBatch(array);
判断是否存在某数据:
[cpp]
BOOL iscontains = dict.contains(@"代震军3");
获取记录条数:
[cpp]
int size = dictBatch.size();
遍历:
[cpp]
for(std::map::iterator it = dict.begin(); it != dict.end();it++){
cout << [it->second UTF8String ]<<" " ;
}
或使用foreach:
[cpp]
__block NSString* str;
for_each(dict.begin(), dict.end(), ^(std::pair pair){
str = pair.first;
cout << [pair.second UTF8String ]<<" " ;
});
获取指定索引记录:
[cpp]
NSString* result = dict[@"代震军2"];
代码比较简单,就不多做解释了,呵呵。