當C 遇到IOS應用開發

2021-12-29 22:25:44 字數 2114 閱讀 9864

在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位元組,所以...