Convertir NSArray en NSString dans Objective-C

Réponses:

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

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

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

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

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

jasmo2
la source
-1

Solution Swift 3.0:

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