Конвертировать NSArray в NSString в Objective-C


185

Мне интересно, как преобразовать NSArray [@"Apple", @"Pear ", 323, @"Orange"] в строку в Objective-C .



47
@beryllium Этот вопрос был задан через два года после моего вопроса.
alexyorke

Ответы:


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), а затем объединить их с -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

Как намекнул Санджай - я использовал метод componentJoinedByString из NSArray, который выполняет соединение и возвращает вас NSString

КСТАТИ NSString имеет обратный метод componentSeparatedByString, который выполняет разбиение и возвращает NSArray .


10

Недавно я нашел действительно хороший учебник по строкам Objective-C:

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

И я подумал, что это может быть интересно

Если вы хотите разделить строку на массив, используйте метод компонентыSeparatedByString для достижения этой цели:

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:@""];

и у вас есть DIC или несколько массивов, то использовали ниже

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

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

Первая строка инициализирует массив с объектами. Вторая строка объединяет все элементы этого массива, добавляя строку внутри "" и возвращает строку.


Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
Дональд Дак

Спасибо за ваш совет, искренне!
Абдул Азиз Рустам

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"

В Свифте 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. Это может работать в Цели С


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.