Перетворити NSArray в NSString в Objective-C


Відповіді:


534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];

1
Чи не буде це те ж саме, що і виклик [опис масиву]?
TechZen

10
@TechZen - ні, тому що [array description]вставляє нові рядки та зовнішні дужки.
Дейв ДеЛонг

Це має бути обрана відповідь!
pixelfreak

56
Просто хочу бути впевненим тут, але чи NSString * myString = [array componentsJoinedByString:@""];прийнятна заміна цього?
Мік Маккаллум

10
@ 0x7fffffff: Це рівнозначно, якщо масив містить лише "базові" типи. Для складних типів він буде їх строкувати як <ClassName: InstanceAddress>. valueForKeyДозволяє отримати вказану властивість для кожного елемента. У цьому випадку descriptionце NSString *властивість від NSObject, чий геть може бути переосмислений його підкласами.
jweyrich

32

Одним із підходів було б повторення масиву, викликаючи descriptionповідомлення по кожному елементу:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    [result appendString:[obj description]];
}
NSLog(@"The concatenated string is %@", result);

Іншим підходом було б зробити щось на основі класу кожного елемента:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    if ([obj isKindOfClass:[NSNumber class]])
    {
        // append something
    }
    else
    {
        [result appendString:[obj description]];
    }
}
NSLog(@"The concatenated string is %@", result);

Якщо ви хочете комами та іншою стороною інформацією, ви можете просто зробити:

NSString * result = [array description];

Якщо масив має багато елементів, може бути більш ефективним , щоб спочатку перетворити всі елементи в рядки (можливо , з використанням -description) і CONCAT їх після цього , використовуючи -componentsJoinedByString:з в @""якості параметра.
Георг Шоллі

Я б пішов з цим методом над методом Дейвом Делонг, якщо тільки не налагодити.
TechZen

17

Я думаю, що відповідь Санджай майже не було, але я використовував це таким чином

NSArray *myArray = [[NSArray alloc] initWithObjects:@"Hello",@"World", nil];
NSString *greeting = [myArray componentsJoinedByString:@" "];
NSLog(@"%@",greeting);

Вихід:

2015-01-25 08:47:14.830 StringTest[11639:394302] Hello World

Як натякав Санджай - я використовував метод componentsJoinedByString з NSArray , що робить з'єднання і дає вам назад NSString

BTW NSString має зворотний метод компонентиSeparatedByString, який робить розщеплення і повертає вам NSArray назад.


10

Нещодавно я знайшов справді хороший підручник з рядків Objective-C:

http://ios-blog.co.uk/tutorials/objective-c-strings-a-guide-for-beginners/

І я подумав, що це може зацікавити:

Якщо ви хочете розділити рядок на масив, використовуйте метод, який називається componentsSeparatedByString, щоб досягти цього:

NSString *yourString = @"This is a test string";
    NSArray *yourWords = [myString componentsSeparatedByString:@" "];

    // yourWords is now: [@"This", @"is", @"a", @"test", @"string"]

якщо вам потрібно розділити набір з декількох різних символів, використовуйте компоненти NSStringSeparatedByCharactersInSet:

NSString *yourString = @"Foo-bar/iOS-Blog";
NSArray *yourWords = [myString componentsSeparatedByCharactersInSet:
                  [NSCharacterSet characterSetWithCharactersInString:@"-/"]
                ];

// yourWords is now: [@"Foo", @"bar", @"iOS", @"Blog"]

Зауважте, що розділовий рядок не може бути порожнім. Якщо вам потрібно відокремити рядок на його окремі символи, просто переведіть через довжину рядка і перетворіть кожну таблицю в нову рядок:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}

9
NSString * str = [componentsJoinedByString:@""];

і у вас є дік або множина масиву, потім використовується нижче

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   

1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];

Перший рядок ініціалізує масив з об'єктами. Другий рядок приєднується до всіх елементів цього масиву, додаючи рядок усередині "" і повертає рядок.


Хоча цей код може відповісти на питання, надаючи додатковий контекст стосовно того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Дональд Дак

Дякую за пораду, щиро!
AbdulAziz Rustam Ogli

1

Завдання C Рішення

NSArray * array = @[@"1", @"2", @"3"];
NSString * stringFromArray = [[array valueForKey:@"description"] componentsJoinedByString:@"-"];   // "1-2-3"

Ті, хто шукає рішення в Swift

Якщо масив містить рядки, ви можете використовувати метод приєднання String:

var array = ["1", "2", "3"]

let stringFromArray = "-".join(array) // "1-2-3"

У Swift 2:

var array = ["1", "2", "3"]

let stringFromArray = array.joinWithSeparator("-") // "1-2-3"

У Swift 3 і 4

var array = ["1", "2", "3"]

let stringFromArray = array.joined(separator: "-") // "1-2-3"

-1

Наскільки я знаю, це легко.

var NSArray_variable = NSArray_Object[n]
var stringVarible = NSArray_variable as String

nє внутрішнім положенням у масиві Це в SWIFT мові. Це може працювати в цілі C


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.