2013-06-13 30 views
18

Tôi có một mảng như thế này:Flatten một NSArray

array: (
    (
     "http://aaa/product/8_1371121323.png", 
     "http://aaa/product/14_1371123271.png" 
    ), 
    (
     "http://aaa/product/9_1371121377.png" 
    ) 
) 

và tôi phải tạo mảng khác từ đó một như thế này

array: (
    "http://aaa/product/8_1371121323.png", 
    "http://aaa/product/14_1371123271.png", 
    "http://aaa/product/9_1371121377.png" 
) 

Làm thế nào tôi có thể làm điều đó? Có thể kết hợp tất cả các đối tượng và tách chúng bằng một số chuỗi không?

Trả lời

5

mẫu: Mã

NSMutableArray *mainArray = [[NSMutableArray alloc] init]; 
for (int i = 0; i < bigArray.count ; i++) 
{ 
    [mainArray addObjectsFromArray:[bigArray objectAtIndex:i]]; 
} 
NSLog(@"mainArray :: %@",mainArray); 
+0

Có lẽ esear sử dụng NSMutableArray?) Và cuối cùng [[NSArray alloc] initWithArray: ...] – Sk0prion

+0

@ Sk0prion: Không cần phải sử dụng 'NSMutableArray' cho đến khi OP muốn thêm một cái gì đó sau này trong mảng. – Bhavin

+0

đã nhận được ... thay đổi ghi chú .. – user23790

-1
NSMutableArray *arr1 = [NSMutableArray arrayWithArray:[initialArray objectAtIndex:0]]; 
[arr1 addObjectsFromArray:[initialArray objectAtIndex:1]]; 

Bây giờ arr1 chứa tất cả các đối tượng Mã

+1

Điều này giả định rằng mảng đầu vào chỉ bao giờ có chính xác hai mảng phụ. –

1

mẫu:

NSArray* arrays = @(@(@"http://aaa/product/8_1371121323.png",@"http://aaa/product/14_1371123271.png"),@(@"http://aaa/product/9_1371121377.png")); 
NSMutableArray* flatArray = [NSMutableArray array]; 
for (NSArray* innerArray in arrays) { 
    [flatArray addObjectsFromArray:innerArray]; 
} 

NSLog(@"%@",[flatArray componentsJoinedByString:@","]); 
+2

1) NSArray * arr = @ [@ [.., ..], @ [..]]. 2) Cuối cùng bạn nhận được mảng với 2 yếu tố thay vì 3. – Sk0prion

+0

chỉ cần vượt qua một mảng .. tôi bỏ qua dòng đầu tiên – user23790

101

Nó có thể được thực hiện trong một dòng duy nhất nếu bạn không nhớ sử dụng mã hóa khóa-giá trị (KVC). Nhà điều hành thu thập @unionOfArrays thực hiện chính xác những gì bạn đang tìm kiếm.

Có thể bạn đã gặp KVC thường xuyên nhất trong các biến vị ngữ, ràng buộc và các địa điểm tương tự. Tuy nhiên, nó có thể được gọi trong mã Objective-C bình thường như thế này:

NSArray *flatArray = [array valueForKeyPath: @"@unionOfArrays.self"]; 

Có nhà khai thác bộ sưu tập khác trong KVC, tất cả bắt đầu bằng một dấu @. Có thêm thông tin trong số docs.

+0

Rất đẹp! Tôi chỉ tò mò: bạn đã kiểm tra xem nó có hoạt động với các mảng lồng nhau sâu hơn không? –

+0

@MartinR khá chắc chắn bạn không thể có được các toán tử thu thập để làm việc đệ quy đến độ sâu tùy ý, nhưng điều này hoạt động trên các mảng đa chiều. Tôi đã đăng câu hỏi tự trả lời với kết quả của một thử nghiệm nhỏ: http://stackoverflow.com/q/17109942/644348 – Monolo

+3

+1, KVC luôn tuyệt vời. – Bhavin