Chuyển đổi NSArray thành NSString trong Objective-C


Câu trả lời:


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

1
Điều này sẽ không hoàn thành điều tương tự như gọi [mô tả mảng]?
TechZen

9
@TechZen - không, vì [array description]chèn dòng mới và dấu ngoặc đơn bên ngoài.
Dave DeLong

Đây nên là câu trả lời được lựa chọn!
pixelfreak

56
Chỉ muốn chắc chắn ở đây, nhưng là NSString * myString = [array componentsJoinedByString:@""];một sự thay thế chấp nhận được cho điều này?
Mick MacCallum

10
@ 0x7fffffff: Tương đương nếu mảng chỉ chứa các loại "cơ bản". Đối với các loại phức tạp, nó sẽ xâu chuỗi chúng thành <ClassName: InstanceAddress>. Làm valueForKeycho nó lấy thuộc tính được chỉ định cho từng mục. Trong trường hợp này, descriptionlà một thuộc NSString *tính từ NSObject, mà getter có thể được ghi đè bởi các lớp con của nó.
jweyrich

32

Một cách tiếp cận sẽ là lặp lại qua mảng, gọi descriptiontin nhắn trên mỗi mục:

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

Một cách tiếp cận khác là làm một cái gì đó dựa trên lớp của từng mặt hàng:

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

Nếu bạn muốn có dấu phẩy và thông tin không liên quan khác, bạn có thể thực hiện:

NSString * result = [array description];

Nếu mảng có nhiều yếu tố nó có thể hiệu quả hơn để chuyển đổi đầu tiên tất cả các yếu tố để dây (có thể sử dụng -description) và concat họ sau đó sử dụng -componentsJoinedByString:với @""là tham số.
Georg Schölly

Tôi sẽ thực hiện theo phương pháp này qua phương pháp của Dave Delong trừ khi bạn chỉ gỡ lỗi.
TechZen

17

Tôi nghĩ câu trả lời của Sanjay đã gần đến nhưng tôi đã sử dụng nó theo cách này

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

Đầu ra:

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

Như Sanjay đã gợi ý - Tôi đã sử dụng các thành phần phương thứcJoinedByString từ NSArray có tham gia và trả lại cho bạn NSString

BTW NSStringcác thành phần phương thức đảo ngượcSeparatedByString thực hiện việc phân tách và trả lại NSArray cho bạn .


10

Gần đây tôi đã tìm thấy một hướng dẫn thực sự tốt về Chuỗi Objective-C:

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

Và tôi nghĩ rằng điều này có thể được quan tâm:

Nếu bạn muốn chia chuỗi thành một mảng, hãy sử dụng một phương thức có tên là thành phầnSeparatedByString để đạt được điều này:

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

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

nếu bạn cần phân tách trên một tập hợp nhiều ký tự khác nhau, hãy sử dụng các thành phần của NSStringSeparatedByChar characterInset:

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

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

Tuy nhiên, lưu ý rằng chuỗi phân cách không thể để trống. Nếu bạn cần tách một chuỗi thành các ký tự riêng lẻ của nó, chỉ cần lặp qua chiều dài của chuỗi và chuyển đổi từng char thành một chuỗi mới:

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

và bạn có dic hoặc nhiều mảng sau đó được sử dụng dưới đây

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

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

Dòng đầu tiên khởi tạo một mảng với các đối tượng. Dòng thứ hai kết hợp tất cả các phần tử của mảng đó bằng cách thêm chuỗi bên trong "" và trả về một chuỗi.


Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Vịt Donald

Cảm ơn lời khuyên của bạn, chân thành!
AbdulAziz Rustam Ogli

1

Giải pháp khách quan C

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

Những người đang tìm kiếm một giải pháp trong Swift

Nếu mảng chứa chuỗi, bạn có thể sử dụng phương thức nối của Chuỗi:

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

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

Trong Swift 2:

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

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

Trong Swift 3 & 4

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

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

-1

Cách tôi biết là dễ dàng.

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

nlà vị trí bên trong trong mảng Điều này trong Ngôn ngữ SWIFT. Nó có thể hoạt động trong Mục tiêu C


-1

Giải pháp Swift 3.0:

let string = array.joined(separator: " ")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.