0

たとえば、次のように、あらかじめ決められた値に基づいて文字を整数に変換したいと考えています。

a = 0 
b = 1
c = 2
d = 3

等...

現在、If/Else If でそれを行っています。変換のリストがかなり長くなる可能性があるため、より高速でより良い方法があるかどうかを知りたいだけです。

これが私が今使っているものです:

-(NSInteger)ConvertToInt:(NSString *)thestring {
    NSInteger theint;
    if([thestring isEqualToString:@"a"] == YES){
        theint = 0;
    } else if ([thestring isEqualToString:@"b"] == YES){
        theint = 1;
    } //etc...

    return theint;
}

これは問題なく動作しますが、私が言ったように、より理にかなっている場合は、すべてのキー/値を含む配列を作成し、それを実行して整数を返すことができますか?

私は Objective C/iOS の初心者なので、例を挙げてください。私は Web 言語から来ました。

ありがとう!

編集:みんな助けてくれてありがとう。taskinoors の回答を使用しましたが、エラーメッセージを表示していた NSDictionary を次のように置き換えました。

NSDictionary *dict;
dict = [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithInt:0], @"a",
        [NSNumber numberWithInt:1], @"b",
        [NSNumber numberWithInt:2], @"c", nil];
4

2 に答える 2

4
unichar ch = [thestring characterAtIndex:0];
theint = ch - 'a';

'a'一重引用符はastring ではなくcharacter であることに注意してください"a"

例のように値が規則的でない場合は、事前定義されたすべての値を辞書に保存できます。例えば:

"a" = 5;
"b" = 1;
"c" = 102;

NSArray *values = [NSArray arrayWithObjects:[NSNumber numberWithInt:5],
    [NSNumber numberWithInt:1], [NSNumber numberWithInt:102], nil];
NSArray *keys = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjects:values forKeys:keys];

theint = [[dic valueForKey:thestring] intValue];
于 2012-04-09T19:45:49.663 に答える
1

どの文字列がどの整数にマップされるかについてある程度の柔軟性を保ちたい場合、および整数が 0 から n-1 で実行され、配列内に n 個の一意の項目がある場合、次のようにすることができます。

-(NSInteger)ConvertToInt:(NSString *)thestring {
    NSArray *arr = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", nil];
    NSInteger theint = [arr indexOfObject:thestring];
    return theint;
}

これは毎回配列を作成しますが、これは非常に非効率的です。最適な方法は、クラスで一度配列を作成してから、indexOfObject メソッド呼び出しでその配列への参照を使用することです。

于 2012-04-09T19:50:51.050 に答える