2011-08-30 62 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++。 –