Convierta NSArray a NSString en Objective-C


Respuestas:


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

1
¿Esto no logrará lo mismo que llamar a [descripción de matriz]?
TechZen

10
@TechZen: no, porque [array description]inserta nuevas líneas y paréntesis externos.
Dave DeLong

¡Esta debería ser la respuesta elegida!
pixelfreak

56
Solo quiero estar seguro aquí, pero ¿es NSString * myString = [array componentsJoinedByString:@""];un sustituto aceptable para esto?
Mick MacCallum

10
@ 0x7fffffff: es equivalente si la matriz contiene solo tipos "básicos". Para tipos complejos, los clasificará como <ClassName: InstanceAddress>. Esto valueForKeyhace que recupere la propiedad especificada para cada elemento. En este caso, descriptiones una NSString *propiedad de NSObject, cuyo captador puede ser anulado por sus subclases.
jweyrich

32

Un enfoque sería iterar sobre la matriz, llamando al descriptionmensaje en cada elemento:

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, simplemente puede hacer:

NSString * result = [array description];

Si la matriz tiene muchos elementos que podría ser más eficiente a todos los elementos primer convertido a cadenas (probablemente usando -description) y concat ellos después de que el uso -componentsJoinedByString:con @""como parámetro.
Georg Schölly 01 de

Yo usaría este método sobre el de Dave Delong a menos que solo esté depurando.
TechZen

17

Creo que la respuesta de Sanjay estaba casi allí, pero la usé 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: utilicé los componentes del método JooByString de NSArray que se unen y te devuelven NSString

Por cierto, NSString tiene componentes de método inverso Separated ByString que hace la división y le devuelve NSArray .


10

Recientemente encontré un muy buen tutorial sobre las cadenas Objective-C:

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, use un método llamado componentsSeparatedByString para lograr esto:

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

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

si necesita dividir en un conjunto de varios caracteres diferentes, use los componentes de NSStringSeparatedByCharactersInSet:

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

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

Sin embargo, tenga en cuenta que la cadena de separación no puede estar en blanco. Si necesita separar una cadena en sus caracteres individuales, simplemente recorra la longitud de la cadena y convierta cada carácter 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];
}

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

y tienes dic o matriz múltiple y luego usas abajo

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

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 agregando la cadena dentro del "" y devuelve una cadena.


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

Gracias por tu consejo, sinceramente!
AbdulAziz Rustam Ogli

1

Objetivo C Solución

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

Aquellos que buscan una solución en Swift

Si la matriz contiene cadenas, puede usar el método de unión de la cadena:

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

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

En Swift 2:

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

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

En Swift 3 y 4

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

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

-1

La forma en que lo sé es fácil.

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

nes la posición interna en la matriz Esto en lenguaje SWIFT. Podría funcionar en el objetivo C


-1

Solución Swift 3.0:

let string = array.joined(separator: " ")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.