Convertire NSArray in NSString in Objective-C


Risposte:


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

1
Questo non compirà la stessa cosa di chiamare [descrizione dell'array]?
TechZen,

10
@TechZen - no, perché [array description]inserisce nuove righe e parentesi esterne.
Dave DeLong,

Questa dovrebbe essere la risposta scelta!
pixelfreak,

56
Voglio solo essere sicuro qui, ma è NSString * myString = [array componentsJoinedByString:@""];un sostituto accettabile per questo?
Mick MacCallum,

10
@ 0x7fffffff: è equivalente se l'array contiene solo tipi "base". Per tipi complessi, li codificherà come <ClassName: InstanceAddress>. Lo valueForKeyfa recuperare la proprietà specificata per ogni elemento. In questo caso, descriptionè una NSString *proprietà di NSObject, il cui getter può essere sostituito dalle sue sottoclassi.
jweyrich,

32

Un approccio sarebbe quello di iterare sull'array, chiamando il descriptionmessaggio su ciascun elemento:

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

Un altro approccio sarebbe quello di fare qualcosa in base alla classe di ogni articolo:

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

Se vuoi virgole e altre informazioni estranee, puoi semplicemente fare:

NSString * result = [array description];

Se l'array ha molti elementi potrebbe essere più efficiente per primo convertito tutti gli elementi a stringhe (probabilmente utilizzando -description) e concat loro dopo che l'utilizzo -componentsJoinedByString:con @""come parametro.
Georg Schölly,

Vorrei seguire questo metodo rispetto a quello di Dave Delong a meno che tu non abbia appena eseguito il debug.
TechZen,

17

Penso che la risposta di Sanjay fosse quasi lì, ma l'ho usata in questo modo

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

Produzione :

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

Come aveva accennato Sanjay, ho usato i componenti del metodo JoinedByString di NSArray che unisce e ti restituisce NSString

BTW NSString ha componenti del metodo inversoSeparatedByString che esegue la divisione e restituisce NSArray .


10

Di recente ho trovato un ottimo tutorial sulle stringhe Objective-C:

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

E ho pensato che questo potesse essere di interesse:

Se si desidera dividere la stringa in un array, utilizzare un metodo chiamato componentsSeparatedByString per ottenere questo:

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

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

se devi dividere un set di più caratteri diversi, usa i componenti di NSStringSeparatedByCharactersInSet:

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

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

Si noti tuttavia che la stringa di separazione non può essere vuota. Se devi separare una stringa nei suoi singoli caratteri, basta scorrere la lunghezza della stringa e convertire ogni carattere in una nuova stringa:

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

e hai dic o più array quindi usato qui sotto

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

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

La prima riga inizializza un array con oggetti. La seconda riga unisce tutti gli elementi di tale array aggiungendo la stringa all'interno di "" e restituendo una stringa.


Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Paperino,

Grazie per il tuo consiglio, sinceramente!
Abdul Aziz Rustam Ogli,

1

Soluzione obiettivo C.

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

Chi è alla ricerca di una soluzione Swift

Se l'array contiene stringhe, è possibile utilizzare il metodo join della stringa:

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

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

In Swift 2:

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

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

In Swift 3 e 4

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

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

-1

Il modo in cui lo so è facile.

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

nè la posizione interna dell'array Questo in linguaggio SWIFT. Potrebbe funzionare nell'obiettivo C


-1

Soluzione Swift 3.0:

let string = array.joined(separator: " ")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.