แปลง NSArray เป็น NSString ใน Objective-C


185

ฉันสงสัยว่าจะแปลงNSArray [@"Apple", @"Pear ", 323, @"Orange"]เป็นสตริงในObjective-Cได้อย่างไร



47
@beryllium คำถามนั้นถูกถามสองปีหลังจากคำถามของฉัน
alexyorke

คำตอบ:


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

1
สิ่งนี้จะไม่ประสบความสำเร็จเช่นเดียวกับการโทร [คำอธิบายอาร์เรย์] หรือไม่
TechZen

10
@TechZen - ไม่เพราะ[array description]แทรกบรรทัดใหม่และวงเล็บด้านนอก
Dave DeLong

นี่ควรเป็นคำตอบที่เลือก!
pixelfreak

56
ต้องการให้แน่ใจที่นี่ แต่เป็นNSString * myString = [array componentsJoinedByString:@""];สิ่งทดแทนที่ยอมรับได้สำหรับสิ่งนี้หรือไม่?
มิก MacCallum

10
@ 0x7fffffff: มันเทียบเท่าได้หากอาร์เรย์มีประเภท "พื้นฐาน" เท่านั้น สำหรับประเภทที่ซับซ้อนก็จะ stringify <ClassName: InstanceAddress>พวกเขาเป็น valueForKeyทำให้มันดึงคุณสมบัติที่ระบุสำหรับแต่ละรายการ ในกรณีdescriptionนี้เป็นNSString *คุณสมบัติจากNSObjectซึ่ง getter สามารถถูกแทนที่ด้วยคลาสย่อย
jweyrich

32

วิธีหนึ่งที่จะทำซ้ำในอาร์เรย์เรียกdescriptionข้อความในแต่ละรายการ:

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

อีกแนวทางหนึ่งคือการทำบางสิ่งตามคลาสของแต่ละรายการ:

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

หากคุณต้องการเครื่องหมายจุลภาคและข้อมูลเพิ่มเติมอื่น ๆ คุณสามารถทำได้:

NSString * result = [array description];

ถ้าอาร์เรย์มีองค์ประกอบหลาย ๆ คนก็อาจจะมีประสิทธิภาพมากขึ้นเพื่อแปลงแรกองค์ประกอบทั้งหมดสตริง (อาจจะใช้-description) และ concat พวกเขาหลังจากที่ใช้-componentsJoinedByString:กับ@""เป็นพารามิเตอร์
Georg Schölly

ฉันจะไปด้วยวิธีนี้มากกว่าหนึ่งโดย Dave Delong เว้นแต่คุณเพียงแค่แก้จุดบกพร่อง
TechZen

17

ฉันคิดว่าคำตอบของ Sanjay เกือบจะอยู่ที่นั่น แต่ฉันก็ใช้วิธีนี้

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

ผลผลิต:

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

ตามที่ Sanjay ได้บอกใบ้ - ฉันใช้วิธีการcomponentJoinedByStringจาก NSArray ที่เข้าร่วมและให้คืนNSString

BTW NSStringมีการแยกส่วนประกอบของเมธอดSeparatedByStringที่แยกและให้NSArrayกลับมา


10

ฉันเพิ่งพบการสอนที่ดีมากเกี่ยวกับ Objective-C Strings:

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

และฉันคิดว่านี่อาจเป็นที่สนใจ:

หากคุณต้องการแยกสตริงออกเป็นอาร์เรย์ให้ใช้วิธีที่เรียกว่า componentsSeparatedByString เพื่อให้ได้สิ่งนี้:

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

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

หากคุณต้องการแยกชุดอักขระที่แตกต่างกันหลายชุดให้ใช้ส่วนประกอบของ NSStringSeparatedByCharactersInSet:

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

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

โปรดทราบว่าสตริงตัวคั่นต้องไม่ว่างเปล่า หากคุณต้องการแยกสตริงออกเป็นอักขระแต่ละตัวเพียงแค่วนความยาวของสตริงและแปลงอักขระแต่ละตัวเป็นสตริงใหม่:

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

และคุณมี dic หรือหลายอาร์เรย์จากนั้นใช้การร้อง

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

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

บรรทัดแรกเริ่มต้นอาร์เรย์ด้วยวัตถุ บรรทัดที่สองรวมองค์ประกอบทั้งหมดของอาร์เรย์นั้นด้วยการเพิ่มสตริงภายใน "" และส่งคืนสตริง


ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
Donald Duck

ขอบคุณสำหรับคำแนะนำของคุณอย่างจริงใจ!
AbdulAziz Rustam Ogli

1

Objective C Solution

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

ผู้ที่กำลังมองหาทางออก Swift

หากอาร์เรย์มีสตริงคุณสามารถใช้วิธีการเข้าร่วมของ String:

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

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

ในสวิฟต์ 2:

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

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

ใน Swift 3 & 4

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

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

-1

วิธีที่ฉันรู้นั้นง่าย

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

nเป็นตำแหน่งภายในของอาเรย์นี้ในภาษา SWIFT มันอาจทำงานในObjective C


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.