Ubah NSArray ke NSString di Objective-C

Jawaban:

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

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

dan Anda telah dic atau beberapa array kemudian digunakan di bawah

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

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

jasmo2
sumber
-1

Solusi Swift 3.0:

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