2011-08-30 39 views
1

我需要將char值映射到Objective-C中的int值。我知道NSDictionary是因爲它涉及引用類型,這些是值。在迭代NSString時將使用該映射。字符串中的每個字符都將被轉換爲整數值。所有的整數將被彙總在一起。將char映射到int中Objective-C

使用NSDictionary似乎是不合適的,因爲我必須做的所有類型的強制。 (將值類型,char和int轉換爲引用類型。)

我想我得下降到C才能做到這一點,但我對C庫的經驗非常有限。

是否有大多數C開發人員使用的值將char值映射到int值?

編輯澄清

的C#相當於將是一個Dictionary<char,int>

僞代碼,我想以下幾點:

for (int i = 0; i < [string length]; i++) { 
    char current = [string characterAtIndex:i]; 
    int score = map[current]; // <- I want map without boxing 
    // do something with score 
} 
+0

'char'值或'char'字符串? –

+2

你的問題有點含糊不清 - 我們在這裏談論原始語言還是NSNumbers?一個char是一個2字節的基元,它可以在沒有任何轉換的情況下適合4字節的int,所以除非你特別提到NSNumber,否則沒有什麼特別的你需要做。 – Perception

+0

我並不是在尋找char的int值,Google很喜歡這個例子。我想爲每個char賦值並將char值映射爲int值。 – ageektrapped

回答

0

如果我理解正確,您想將char s和int s存儲在字典中,作爲鍵和值。但是,NSDictionary只接受對象。解決方案?包裹char S和int S IN的NSNumber對象:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithInt:1], 
         [NSNumber numberWithChar:'a'], 
         [NSNumber numberWithInt:2], 
         [NSNumber numberWithChar:'b'], 
         nil]; 

或者,如果你不想拳擊,爲什麼不只是做一個函數,char S和返回int S'

int charToScore(char character) 
{ 
    switch (character) { 
     case 'a': 
      return 1; 
     case 'b': 
      return 2; 
     default: 
      return 0; 
    } 
} 
+0

我想避免所有的包裝。把所有東西都包起來看起來非常浪費。雖然,就像我寫這篇文章一樣,用NSNumber做這件事可能不會那麼糟糕。在涉及值類型和裝箱方面,我並不熟悉Objective-C的所有內容。這是一個很大的perf命中? – ageektrapped

+0

如果您使用'NSDictionary',則必須包裝原始值。 –

+0

我們在說多長時間的字符串? –

3

字符爲int?

char aChar = 'a'; 
int foo = (int) aChar; 

完成。不需要散列或其他任何東西。即使你想映射字符 - > NSNumber,一個256字符的數組(char是一個有符號的8位類型)的開銷很小。 (除非我完全誤解了你的問題 - 你是要求(char *)?...也就是C字符串?顯示一些代碼。)。

+0

這是正確的,但不是提問者的意思(他不清楚)。 –

+0

我想盡可能多;很難解析。 – bbum

0

@Pontus在Objective-C的正確答案,但如果你願意使用C++,你可以使用std::map<char, int>(或仍然略微非標準unordered_map<char, int>。)

要使用C++從Objective-C中,您必須將文件從Whatever.m重命名爲Whatever.mm - 這告訴GCC該文件包含Objective-C++,它允許您在C++基礎中使用Objective-C語法。

+0

我可以在iPhone項目中使用它嗎? – ageektrapped

+0

當然。 iOS上完全支持C++。 –

相關問題