我需要在Objective-C中将char
值映射到int
值。我知道 NSDictionary 是因为它处理引用类型,这些是值。迭代NSString时将使用该映射。字符串中的每个字符都将转换为整数值。所有整数将汇总在一起。
使用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 :(得分:3)
Char to int?
char aChar = 'a';
int foo = (int) aChar;
完成。不需要哈希或其他任何东西。即使你想映射char - &gt; NSNumber是一个256个字符的数组(char是一个带符号的8位类型),开销非常小。
(除非我完全误解了你的问题 - 你要求(char *)?...即C字符串?显示一些代码。)。
答案 1 :(得分:0)
如果我理解正确,您希望将char
和int
存储在字典中,作为键和值。但是,NSDictionary只接受对象。解决方案?将char
和int
包裹在NSNumber
对象中:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1],
[NSNumber numberWithChar:'a'],
[NSNumber numberWithInt:2],
[NSNumber numberWithChar:'b'],
nil];
或者如果你不想拳击,为什么不只是制作一个需要char
并返回int
s的函数?
int charToScore(char character)
{
switch (character) {
case 'a':
return 1;
case 'b':
return 2;
default:
return 0;
}
}
答案 2 :(得分:0)
@Pontus在Objective-C中有正确的答案,但是如果你愿意使用C ++,你可以使用std::map<char, int>
(或者仍然稍微不标准的unordered_map<char, int>
。)
要在Objective-C中使用C ++,您必须将文件从Whatever.m
重命名为Whatever.mm
- 这告诉GCC该文件包含Objective-C ++,它允许您使用Objective-带有C ++基础的C语法。