在Objective-C中将字符映射为int

在Objective-C中将字符映射为int,objective-c,map,char,int,Objective C,Map,Char,Int,我需要将Objective-C中的char值映射到int值。我知道NSDictionary不可用,因为它处理引用类型,这些都是值。在遍历NSString时将使用映射。字符串中的每个字符都将转换为整数值。所有整数将相加 使用NSDictionary似乎不合适,因为我必须执行所有类型强制。(将值类型char和int转换为引用类型。) 我想我必须使用C来完成这项工作,但我使用C库的经验非常有限 大多数C开发人员使用的东西是否可以将char值映射到int值 编辑以进行澄清 C#等价物将是一本字典 在伪代

我需要将Objective-C中的
char
值映射到
int
值。我知道NSDictionary不可用,因为它处理引用类型,这些都是值。在遍历NSString时将使用映射。字符串中的每个字符都将转换为整数值。所有整数将相加

使用NSDictionary似乎不合适,因为我必须执行所有类型强制。(将值类型char和int转换为引用类型。)

我想我必须使用C来完成这项工作,但我使用C库的经验非常有限

大多数C开发人员使用的东西是否可以将
char
值映射到
int

编辑以进行澄清

C#等价物将是一本
字典

在伪代码中,我想介绍以下内容:

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
}
for(int i=0;i<[字符串长度];i++){
当前字符=[字符串字符索引:i];
int score=映射[当前];//字符到int

char aChar = 'a';
int foo = (int) aChar;
完成。不需要散列或其他任何东西。即使您想映射char->NSNumber,256个char的数组(char是有符号的8位类型)的开销也很小


(除非我完全误解了你的问题——你是在问(char*)?…即C字符串吗?显示一些代码。).

如果我理解正确,您希望将
char
s和
int
s作为键和值存储在字典中。但是,NSDictionary只接受对象。解决方案是将
char
s和
int
s包装在
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;
    }
}

@ PoTube在Objto-C中有正确答案,但是如果你愿意使用C++,你可以使用<代码> STD::MAP< /CUL>(或者稍微有点不规范<代码> unordeDeMAP> <代码>)


<> P>从ObjuleC中使用C++,必须将文件从<代码> >任意.m>代码>到<代码> > .mm. < /Cord>——这告诉GCC包含Objy-C++,允许使用Objy-C语法加C++基础。

代码> char < /C>值,或者<代码> char < /Cord>字符串?你的问题有点含糊吗?这里说的是原语还是NSNumbers?字符是一个2字节的原语,不需要任何转换就可以放入一个4字节的整数中,因此,除非你特别提到NSNumber,否则你不需要做什么特殊的事情。我不是在寻找字符的整数,谷歌到处都有这样的例子。我想给每个字符分配一个值并映射字符值转换为int值。我希望避免所有包装。包装所有内容似乎非常浪费。尽管在我写这篇文章时,使用NSNumber进行所有操作可能并不那么糟糕。我不熟悉Objective-C在值类型和装箱方面的所有细节。这是一个巨大的性能打击吗?如果您使用的是
NSDictionary
,您会发现必须包装原始值。我们谈论的字符串有多长?根据人名的顺序,所以极限值小于125个字符。当然!我可以使用开关,因为地图是不变的。Duh。回想起来很明显。我让另一个实现影响了我的思维。然后所有性能问题都消失了。谢谢!我可以在iPhone中使用它吗项目?这是正确的,但不是询问者的意思(他不清楚)。我也这么想;很难解析。