Konvertieren Sie NSArray in NSString in Objective-C

Antworten:

534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
Dave DeLong
quelle
1
Wird dies nicht das Gleiche bewirken wie das Aufrufen von [Array-Beschreibung]?
TechZen
9
@TechZen - nein, da [array description]Zeilenumbrüche und äußere Klammern eingefügt werden.
Dave DeLong
Dies sollte die gewählte Antwort sein!
Pixelfreak
56
Ich möchte hier nur sicher sein, aber ist dies NSString * myString = [array componentsJoinedByString:@""];ein akzeptabler Ersatz dafür?
Mick MacCallum
10
@ 0x7fffffff: Es ist äquivalent, wenn das Array nur "grundlegende" Typen enthält. Bei komplexen Typen werden sie als gekennzeichnet <ClassName: InstanceAddress>. Das valueForKeymacht es die angegebene Eigenschaft für jedes Element abzurufen. In diesem Fall descriptionhandelt es sich um eine NSString *Eigenschaft von NSObject, deren Getter durch ihre Unterklassen überschrieben werden kann.
Jweyrich
32

Ein Ansatz wäre, über das Array zu iterieren und die descriptionNachricht für jedes Element aufzurufen :

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

Ein anderer Ansatz wäre, etwas basierend auf der Klasse jedes Elements zu tun:

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

Wenn Sie Kommas und andere irrelevante Informationen wünschen, können Sie einfach Folgendes tun:

NSString * result = [array description];
Jason
quelle
Wenn das Array viele Elemente enthält, ist es möglicherweise effizienter, zuerst alle Elemente in Zeichenfolgen zu konvertieren (wahrscheinlich mit -description) und sie anschließend -componentsJoinedByString:mit @""als Parameter zu verknüpfen .
Georg Schölly
Ich würde mit dieser Methode über die von Dave Delong gehen, es sei denn, Sie debuggen nur.
TechZen
17

Ich denke, Sanjays Antwort war fast da, aber ich habe sie so benutzt

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

Ausgabe :

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

Als Sanjay angedeutet hatte - habe ich Methode componentsJoinedByString von NSArray , das tut Füge- und gibt Ihnen zurück NSString

BTW NSString verfügt über Komponenten der umgekehrten MethodeSeparatedByString , die die Aufteilung übernimmt und Ihnen NSArray zurückgibt.

Pranay
quelle
10

Ich habe kürzlich ein wirklich gutes Tutorial zu Objective-C-Strings gefunden:

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

Und ich dachte, dass dies von Interesse sein könnte:

Wenn Sie die Zeichenfolge in ein Array aufteilen möchten, verwenden Sie eine Methode namens componentsSeparatedByString, um dies zu erreichen:

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

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

Wenn Sie mehrere verschiedene Zeichen aufteilen müssen, verwenden Sie die Komponenten von NSString. SeparatedByCharactersInSet:

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

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

Beachten Sie jedoch, dass die Trennzeichenfolge nicht leer sein darf. Wenn Sie eine Zeichenfolge in ihre einzelnen Zeichen trennen müssen, durchlaufen Sie einfach die Länge der Zeichenfolge und konvertieren Sie jedes Zeichen in eine neue Zeichenfolge:

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

und Sie haben dic oder mehrere Array dann unten verwendet

NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];   
Sanjay Kakadiya
quelle
1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];

Die erste Zeile initialisiert ein Array mit Objekten. Die zweite Zeile verbindet alle Elemente dieses Arrays durch Hinzufügen der Zeichenfolge innerhalb des "" und gibt eine Zeichenfolge zurück.

AbdulAziz Rustam Ogli
quelle
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Donald Duck
Vielen Dank für Ihren Rat!
AbdulAziz Rustam Ogli
1

Ziel C Lösung

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

Wer nach einer Lösung sucht in Swift

Wenn das Array Zeichenfolgen enthält, können Sie die Verknüpfungsmethode der Zeichenfolge verwenden:

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 & 4

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

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

Die Art, wie ich weiß, ist einfach.

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

nist die innere Position im Array Dies in SWIFT-Sprache. Es könnte in Ziel C funktionieren

jasmo2
quelle
-1

Swift 3.0-Lösung:

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