Ubah NSArray ke NSString di Objective-C


Jawaban:


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

1
Bukankah ini akan menyelesaikan hal yang sama dengan memanggil [deskripsi array]?
TechZen

10
@ TechZen - tidak, karena [array description]menyisipkan baris baru dan tanda kurung luar.
Dave DeLong

Ini harus menjadi jawaban yang dipilih!
pixelfreak

56
Hanya ingin memastikan di sini, tetapi apakah ini NSString * myString = [array componentsJoinedByString:@""];pengganti yang dapat diterima?
Mick MacCallum

10
@ 0x7fffffff: Ini setara jika array hanya berisi tipe "dasar". Untuk tipe yang kompleks, ini akan dikelompokkan sebagai <ClassName: InstanceAddress>. Itu valueForKeymembuatnya mengambil properti yang ditentukan untuk setiap item. Dalam hal ini, descriptionadalah NSString *properti dari NSObject, yang rajutannya dapat ditimpa oleh subkelasnya.
jweyrich

32

Salah satu pendekatan akan beralih pada array, memanggil descriptionpesan pada setiap item:

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

Pendekatan lain adalah melakukan sesuatu berdasarkan kelas setiap item:

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

Jika Anda ingin koma dan informasi asing lainnya, Anda bisa melakukannya:

NSString * result = [array description];

Jika array memiliki banyak elemen, mungkin lebih efisien untuk terlebih dahulu mengkonversi semua elemen menjadi string (mungkin menggunakan -description) dan menggabungkannya setelah itu menggunakan -componentsJoinedByString:dengan @""sebagai parameter.
Georg Schölly

Saya akan menggunakan metode ini dari Dave Delong kecuali Anda hanya melakukan debugging.
TechZen

17

Saya pikir jawaban Sanjay hampir ada tetapi saya menggunakannya dengan cara ini

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

Output:

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

Seperti Sanjay telah mengisyaratkan - Saya menggunakan metode componentsJoinedByString dari NSArray yang bergabung dan memberi Anda kembali NSString

BTW NSString memiliki komponen metode terbalikSeparatedByString yang melakukan pemisahan dan memberi Anda NSArray kembali.


10

Saya baru-baru ini menemukan tutorial yang sangat bagus tentang Objective-C Strings:

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

Dan saya pikir ini mungkin menarik:

Jika Anda ingin membagi string menjadi sebuah array gunakan metode yang disebut componentsSeparatedByString untuk mencapai ini:

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

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

jika Anda perlu membagi beberapa karakter yang berbeda, gunakan komponen NSStringSeparatedByCharactersInSet:

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

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

Perhatikan bahwa string pemisah tidak boleh kosong. Jika Anda perlu memisahkan string menjadi karakter-karakternya masing-masing, cukup loop melalui panjang string dan konversi masing-masing karakter menjadi string baru:

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

dan Anda telah dic atau beberapa array kemudian digunakan di bawah

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

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

Baris pertama menginisialisasi array dengan objek. Baris kedua menggabungkan semua elemen dari array itu dengan menambahkan string di dalam "" dan mengembalikan sebuah string.


Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
Donald Duck

Terima kasih atas saran Anda, dengan tulus!
AbdulAziz Rustam Ogli

1

Tujuan C Solusi

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

Mereka yang mencari solusi di Swift

Jika array berisi string, Anda dapat menggunakan metode gabungan String:

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

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

Dalam Swift 2:

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

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

Dalam Swift 3 & 4

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

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

-1

Cara saya tahu itu mudah.

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

nadalah posisi dalam dalam array This in SWIFT Language. Mungkin berfungsi di Objective C


-1

Solusi Swift 3.0:

let string = array.joined(separator: " ")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.