Мне нужно сопоставить значения 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 ответа
Если я правильно понял, вы хотите сохранить char
и int
в словаре как ключи и значения. Однако NSDictionary принимает только объекты. Решение? Оберните char
и int
в объект 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;
}
}
Char в int?
char aChar = 'a';
int foo = (int) aChar;
Выполнено. Не нужен хеш или что-то еще. Даже если вы хотите отобразить char -> NSNumber, массив из 256 символов (char является 8-битным типом со знаком) очень мало накладных расходов.
(Если я полностью не понял ваш вопрос - вы просите (char *)? ... т.е. строки C? Покажите код.).
@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 ++.
Похожие вопросы
Новые вопросы
objective-c
Этот тег следует использовать только для вопросов, касающихся функций Objective-C или зависящих от кода на языке. Теги [cocoa] и [cocoa-touch] следует использовать, чтобы узнать о фреймворках или классах Apple. Используйте связанные теги [ios], [macos], [apple-watch] и [tvos] для проблем, характерных для этих платформ.