Convertir NSArray en NSString dans Objective-C


Réponses:


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

1
Cela n'accomplira-t-il pas la même chose que d'appeler [description du tableau]?
TechZen

10
@TechZen - non, car [array description]insère les nouvelles lignes et les parenthèses extérieures.
Dave DeLong

Cela devrait être la réponse choisie!
pixelfreak

56
Je veux juste être sûr ici, mais est-ce NSString * myString = [array componentsJoinedByString:@""];un substitut acceptable à cela?
Mick MacCallum

10
@ 0x7fffffff: C'est équivalent si le tableau ne contient que des types "basiques". Pour les types complexes, il les stringifiera comme <ClassName: InstanceAddress>. Le valueForKeyfait récupérer la propriété spécifiée pour chaque élément. Dans ce cas, descriptionest une NSString *propriété from NSObject, dont le getter peut être remplacé par ses sous-classes.
jweyrich

32

Une approche serait d'itérer sur le tableau, en appelant le descriptionmessage sur chaque élément:

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

Une autre approche serait de faire quelque chose en fonction de la classe de chaque élément:

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 vous voulez des virgules et d'autres informations superflues, vous pouvez simplement faire:

NSString * result = [array description];

Si le tableau contient de nombreux éléments, il peut être plus efficace de convertir d'abord tous les éléments en chaînes (probablement en utilisant -description) et de les concaturer ensuite en utilisant -componentsJoinedByString:avec @""comme paramètre.
Georg Schölly

J'irais avec cette méthode sur celle de Dave Delong à moins que vous ne soyez simplement en train de déboguer.
TechZen

17

Je pense que la réponse de Sanjay était presque là mais je l'ai utilisée de cette façon

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

Production :

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

Comme Sanjay l'avait laissé entendre - j'ai utilisé des composants de méthodeJoinedByString de NSArray qui rejoignent et vous rendent NSString

BTW NSString a des composants de méthode inverseSeparatedByString qui effectue le fractionnement et vous rend NSArray .


10

J'ai récemment trouvé un très bon tutoriel sur les chaînes Objective-C:

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

Et j'ai pensé que cela pourrait être intéressant:

Si vous souhaitez diviser la chaîne en un tableau, utilisez une méthode appelée componentsSeparatedByString pour y parvenir:

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

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

si vous avez besoin de fractionner sur un ensemble de plusieurs caractères différents, utilisez les composants de NSStringSeparatedByCharactersInSet:

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

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

Notez cependant que la chaîne de séparation ne peut pas être vide. Si vous avez besoin de séparer une chaîne en ses caractères individuels, parcourez simplement la longueur de la chaîne et convertissez chaque caractère en une nouvelle chaîne:

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

et vous avez un dic ou un tableau multiple puis utilisé ci-dessous

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

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

La première ligne initialise un tableau avec des objets. La deuxième ligne joint tous les éléments de ce tableau en ajoutant la chaîne à l'intérieur du "" et renvoie une chaîne.


Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
Donald Duck

Merci pour vos conseils, sincèrement!
AbdulAziz Rustam Ogli

1

Solution Objectif C

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

Ceux qui recherchent une solution Swift

Si le tableau contient des chaînes, vous pouvez utiliser la méthode de jointure de String:

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

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

Dans Swift 2:

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

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

Dans Swift 3 & 4

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

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

-1

La façon dont je sais est facile.

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

nest la position intérieure dans le tableau This en SWIFT Language. Cela pourrait fonctionner dans l' objectif C


-1

Solution Swift 3.0:

let string = array.joined(separator: " ")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.