2009-12-01 22 views
177

mi chiedo come convertire un NSArray[@"Apple", @"Pear ", 323, @"Orange"] ad una stringa in Objective-C.Convert NSArray a NSString in Objective-C

+1

[Converti NSString separato da virgola in NSArray] (http://stackoverflow.com/a/8204215/194544) – beryllium

+43

@beryllium Quella domanda è stata posta due * anni * dopo la mia domanda. – alexy13

risposta

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

Questo non compirebbe la stessa cosa che chiamare [descrizione dell'array]? – TechZen

+7

@TechZen - no, perché '[descrizione matrice]' inserisce una nuova riga e la parentesi esterna. –

+0

Questa dovrebbe essere la risposta scelta! – pixelfreak

32

Un approccio potrebbe essere quello di iterare l'array, chiamando il messaggio description su ogni elemento:

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

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]; 
+0

Se la matrice ha molti elementi, potrebbe essere più efficiente convertire prima tutti gli elementi in stringhe (probabilmente usando '-description') e concatenarli successivamente usando' -componentsJoinedByString: 'con' @ "" 'come parametro. –

+0

Vorrei andare con questo metodo su quello di Dave Delong a meno che non sia il tuo debug. – TechZen

10

Recentemente ho trovato davvero un buon tutorial su Objective-C Strings:

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

e ho pensato che questo potrebbe essere di interesse:

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

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

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

se è necessario dividere su una serie di diversi charact diversa ERS, utilizzare componentsSeparatedByCharactersInSet di NSString:

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

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

Nota tuttavia che la stringa di separazione non può essere vuoto. Se è necessario 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]; 
} 
8
NSString * str = [componentsJoinedByString:@""]; 

e si dispone di serie DIC o multipla poi utilizzato soffietto

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

penso la risposta di Sanjay era quasi lì, ma l'ho usato in questo modo

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

in uscita:

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

Come Sanjay aveva accennato - ho usato il metodo componentsJoinedByString da NSArray che non unisce e si restituisce NSString

BTW NSString ha metodo reverse componentsSeparatedByString che fa il suddivisione e ti dà NSArray indietro.

-1

Il modo in cui so è facile.

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

n è la posizione interna nella matrice Questo a SWIFT lingua. Potrebbe funzionare in Objective C

-1

Swift soluzione 3.0:

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

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

+0

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo sul perché e/o su come questo codice risponde alla domanda migliora il suo valore a lungo termine. –

+0

Grazie per il vostro consiglio, sinceramente! –