Карта char для int в Objective-C - PullRequest
       17

Карта char для int в Objective-C

1 голос
/ 30 августа 2011

Мне нужно сопоставить char значения с int значениями в Objective-C.Я знаю, что 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
}

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Char to int?

char aChar = 'a';
int foo = (int) aChar;

Готово. Не нужно хэша или чего-то еще. Даже если вы хотите отобразить char -> NSNumber, массив из 256 char (char является 8-битным типом со знаком) занимает очень мало времени.

(Если я не совсем неправильно понял ваш вопрос - вы спрашиваете (char *)? ... т.е. строки C? Покажите некоторый код.).

0 голосов
/ 30 августа 2011

@ Pontus имеет правильный ответ в Objective-C, но если вы хотите использовать C ++, вы можете использовать std::map<char, int> (или все еще слегка нестандартный unordered_map<char, int>.)

Чтобы использовать C ++ из Objective-C, необходимо переименовать файл с Whatever.m на Whatever.mm - это говорит GCC, что файл содержит Objective-C ++, что позволяет использовать синтаксис Objective-C с C ++ подкрепления.

0 голосов
/ 30 августа 2011

Если я правильно понимаю, вы хотите сохранить 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 с?

int charToScore(char character)
{
    switch (character) {
        case 'a':
            return 1;
        case 'b':
            return 2;
        default:
            return 0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...