在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
//比較器
template
struct dict_compare
};
//僅針對nsstring*比較器
template <>
struct dict_compare
};
#define release_safely(__pointer)
#define retain_safely(__pointer)
template ,
typename _alloc = std::allocator<:pair k v> > >
class dict: public map
dict(nsarray *array)
~dict()
dict& add(const k key, const v value)
const v get(const k key)
bool contains(const k key)
/** 返回指定key的value
*/ const v operator(const k key)
void remove(const k key)
void clear());
} void copyfromarray(nsarray *array)
} }
}; #endif
大家看到,這裡使用的定義比較器的方式來指定當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++)
或使用foreach:
[cpp]
__block nsstring* str;
for_each(dict.begin(), dict.end(), ^(std::pair pair));
獲取指定索引記錄:
[cpp]
nsstring* result = dict[@"代震軍2"];
**比較簡單,就不多做解釋了,呵呵。
當C 遇到IOS應用開發之 List集合
在object c中,陣列使用nsarray和nsmutablearray 可變長陣列 使用語法如下 nsarray array nsarray alloc initwithobjects one two three four nil 取陣列元素的方法 array objectatindex 2 因...
C 當return 遇到遞迴
之前在用return 時,沒有遇到過遞迴情況,但是當我遇到遞迴情況的時候,有點不清晰了,相信這樣的人也不在少數,因此這裡我會給出當遞迴遇到return 會產生的結果。include void fun int x printf yes n int main int argc,char const ar...
C語言 當void遇到 void
void 表示無 任意型別指標,大小為8b,任何型別指標均為8b 舉個例子 char a calloc 8,5 分配5個連續8位元組記憶體空間 int b calloc 8,5 分配5個連續8位元組記憶體空間 結果使用char型別接收,每個char占用乙個位元組,因為分配的空間總共有40位元組,所以...