#php #objective-c #arrays #xcode #string
#php #objective-c #массивы #xcode #строка
Вопрос:
У меня есть эта строка a:10,b:xx,e:20,m:xy,w:30,z:50
Но ключи и значение меняются…
Я хочу преобразовать ее в структуру в objective-c (я хочу, чтобы приложение преобразовывало строку в структуру автоматически, а не вручную)
В PHP результатом будет:
$array = array(
'a' => 10, // or 'a' => "10" (doesn't matter)
'b' => "xx",
'e' => 20, // or 'e' => "20" (doesn't matter)
'm' => "xy",
'w' => 30, // or 'w' => "30" (doesn't matter)
'z' => 50 // or 'z' => "50" (doesn't matter)
);
Итак, как я могу преобразовать эту строку в structure и получить результат, как в примере PHP, но сделать это в objective-c … ?
Пожалуйста, покажите мне точный код, я новичок в objective-c 🙂
Спасибо
Ответ №1:
Для меня эта структура PHP больше похожа на словарь, поэтому я собираюсь предположить, что это так.
NSString *s = @"a:10,b:xx,e:20,m:xy,w:30,z:50";
NSArray *pairs = [s componentsSeparatedByString:@","];
NSMutableArray *keys = [NSMutableArray array];
NSMutableArray *values = [NSMutableArray array];
for (NSString *pair in pairs)
{
NSArray *keyValue = [pair componentsSeparatedByString:@":"];
[keys addObject:[keyValue objectAtIndex:0]];
[values addObject:[keyValue objectAtIndex:1]];
}
NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
NSLog(@"%@", dict);
Это, очевидно, довольно многословно, но требует некоторых сложных манипуляций со строками.
Вывод выглядит следующим образом:
{
a = 10;
b = xx;
e = 20;
m = xy;
w = 30;
z = 50;
}
Комментарии:
1. вот почему я ненавижу Objective-C. Для всех, кто работает с PHP, это действительно боль
2. Манипулирование строками не является сильной стороной Objective-C (кроме того факта, что он получил поддержку Unicode намного лучше, чем большинство альтернатив). Переход на любой язык будет «болезненным». Но речь идет об использовании правильного инструмента для работы. Однако на iOS это единственный (нормальный) инструмент для большинства заданий.
3. Это не только строка. Чтобы делать почти все, вам нужно быть настолько многословным, что, если вы не привыкли, вы скоро сойдете с ума
4. Я при всем уважении не согласен, поскольку детализация способствует удобочитаемости и сопровождаемости. Однако здесь не место для языковой войны.
Ответ №2:
Вы можете разобрать строку, снова разбить фрагменты и поместить все это в словарь. Это должно сработать:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSString *str = @"a:10,b:xx,e:20,m:xy,w:30,z:50";
NSArray *arr = [str componentsSeparatedByString:@","];
for (NSString *fragment in arr) {
NSArray *keyvalue = [fragment componentsSeparatedByString:@":"];
[dict setObject:[keyvalue objectAtIndex:0] forKey:[keyvalue objectAtIndex:1]];
}
Ответ №3:
NSString* myString = @"a:10,b:xx,e:20,m:xy,w:30,z:50";
Используйте приведенный ниже метод NSString.
- (NSArray *)componentsSeparatedByString:(NSString *)separator
NSArray* myArray = [myString componentsSeparatedByString:@","];
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];
for (NSString* stringObj in myArray)
{
NSArray *myTemp1 = [stringObj componentsSeparatedByString:@":"];
[myDictionary setObject:[myTemp1 objectAtIndex:0] forKey:[myTemp1 objectAtIndex:1]];
}
Теперь экземпляр MyDictionary эквивалентен $array