2012-04-09 89 views
0

我想字符轉換爲基於預定值的整數,例如:基於值數組將NSString轉換爲NSInteger的最佳方式是什麼?

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

等等

現在,我有做一個的if/else如果,我只是想知道我應該做的更快/更好的方式,因爲轉換列表可能會相當長。

下面是我使用的是什麼現在:

-(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
unichar ch = [thestring characterAtIndex:0]; 
theint = ch - 'a'; 

需要注意的是,'a'用單引號字符是a,不串"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]; 
+0

對不起,我不太確定該怎麼做。你能告訴我如何使它成爲一個函數,我可以傳遞字符串「a」並返回一個整數。感謝您的意見。 – tsdexter 2012-04-09 19:48:14

+0

我需要使用字符串,因爲我也會有值,例如「ab」傳入,這將需要返回一個整數。 – tsdexter 2012-04-09 19:50:31

+0

@tsdexter如果你不明白這個例子,你應該更好地學習Objective-C和C. – 2012-04-09 19:50:31

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方法調用。

+0

謝謝。這看起來不錯。然而,雖然我可以按數字順序填充數組,但是最好爲每個數組項目分配整數,因爲某些情況下整數將不會按順序排列,或者不會有相應的字符串,因此我必須將它們放在啞元缺失整數的數據。對我來說,按照我的數據順序填充數組也是更容易的(整數不按順序)。任何關於如何去做的建議? – tsdexter 2012-04-09 19:55:25

+0

我認爲他的意圖是建立一種密碼,他可以在那裏傳遞一個像「aryls」這樣的字符串,並得到1,18,25,14,19。這是正確的@tsdexter? – anthropomorphic 2012-04-09 19:55:33

+0

在這種情況下,您會想要像上面提到的@taskinoor一樣使用NSDictionary。 – 2012-04-09 20:01:56

相關問題