2009-12-01 12 views
177

Me pregunto cómo se convierte un NSArray[@"Apple", @"Pear ", 323, @"Orange"] a una cadena en Objective-C.NSArray a NSString en Objective-C

+1

[Convertir NSString separado por coma a NSArray] (http://stackoverflow.com/a/8204215/194544) – beryllium

+43

@beryllium Esa pregunta fue hecha dos años * después de mi pregunta. – alexy13

Respuesta

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

¿No logrará esto lo mismo que llamar a [array description]? – TechZen

+7

@TechZen - no, porque '[array description]' inserta líneas nuevas y los paréntesis externos. –

+0

¡Esta debería ser la respuesta elegida! – pixelfreak

32

Un enfoque sería iterar sobre la matriz, calificando el mensaje description en cada artículo:

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

Otro enfoque sería hacer algo basado en la clase de cada elemento:

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); 

Si desea comas y otra información extraña, puede hacer:

NSString * result = [array description]; 
+0

Si la matriz tiene muchos elementos, podría ser más eficiente convertir primero todos los elementos en cadenas (probablemente usando '-description') y luego concatenarlos usando' -componentsJoinedByString: 'con' @ "' 'como parámetro. –

+0

Me gustaría ir con este método sobre el de Dave Delong a menos que solo esté depurando. – TechZen

10

poco encontré un muy buen tutorial sobre Objective-C Cuerdas:

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

y pensé que esto podría ser de interés:

Si desea dividir la cadena en una matriz utilizar un método llamado componentsSeparatedByString para lograrlo:

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

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

si es necesario dividir en un conjunto de varios charact diferente ERS, utilice componentsSeparatedByCharactersInSet de NSString:

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

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

Nota sin embargo que la cadena de separación no puede estar en blanco. Si es necesario separar una cadena en sus caracteres individuales, solo bucle a través de la longitud de la cadena y convertir cada carbón en una nueva cadena:

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]; 
} 
8
NSString * str = [componentsJoinedByString:@""]; 

y tiene variedad DIC o múltiple a continuación, utiliza abajo

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

creo que la respuesta de Sanjay estaba casi allí, pero he usado de esta manera

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

Salida:

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

Como Sanjay había insinuado - Me utilizado método componentsJoinedByString de NSArray que no unirse y le da la espalda NSString

Por cierto NSString tiene método inverso componentsSeparatedByString que hace el dividir y le da NSArray atrás.

-1

La manera que conozco es fácil.

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

n es la posición interior en la matriz Esto a SWIFT Language. Podría funcionar en C Objetivo

-1

Swift solución 3,0:

let string = array.joined(separator: ",") 
1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil]; 
NSString *stringFromArray = [array componentsJoinedByString:@" "]; 

La primera línea inicializa una matriz con objetos. La segunda línea une todos los elementos de esa matriz al agregar la cadena dentro de "" y devuelve una cadena.

+0

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y/o cómo responde este código a la pregunta mejora su valor a largo plazo. –

+0

¡Gracias por su consejo, sinceramente! –

Cuestiones relacionadas