Convierta NSArray a NSString en Objective-C

Respuestas:

534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
Dave DeLong
fuente
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];
Jason
fuente
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 .

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

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

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   
Sanjay Kakadiya
fuente
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.

AbdulAziz Rustam Ogli
fuente
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"
Asad Ali Choudhry
fuente
-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

jasmo2
fuente
-1

Solución Swift 3.0:

let string = array.joined(separator: " ")
AhmedZah
fuente