Làm thế nào để khai báo một mảng hai chiều kiểu chuỗi trong Objective-C?Làm thế nào để khai báo một mảng hai chiều của kiểu chuỗi trong Objective-C?
Trả lời
Trước tiên, bạn có thể xem xét sử dụng một lớp để giữ các chuỗi trong mảng của bạn hoặc tải nó từ tệp plist (trong đó dễ dàng tạo chuỗi 2d).
Để khai báo trực tiếp, bạn có một vài tùy chọn. Nếu bạn muốn sử dụng một NSArray, bạn sẽ phải tự tạo ra các cấu trúc như thế này:
NSMutableArray *strings = [NSMutableArray array];
for(int i = 0; i < DESIRED_MAJOR_SIZE; i++)
{
[strings addObject: [NSMutableArray arrayWithObject:@"" count:DESIRED_MINOR_SIZE]];
}
Hoặc, sử dụng literals mảng, bạn có thể nhận được một bất biến phiên bản như thế này:
NSArray *strings = @[ @[ @"A", @"B", @"C" ], @[ @"D", @"E", @"F" ], @[ @"G", @"H", @"I" ] ]
sau đó bạn có thể sử dụng nó như thế này:
NSString *s = [[strings objectAtIndex:i] objectAtIndex:j];
Đây là một chút vụng về để khởi tạo, nhưng nó là con đường để đi nếu bạn muốn sử dụng các phương pháp NSArray.
Một cách khác là sử dụng C mảng:
NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil
Và sau đó sử dụng nó như thế này:
NSString *s = strings[i][j];
Đây là ít lúng túng, nhưng bạn phải cẩn thận để giữ lại/sao chép và phát hành các giá trị khi bạn đặt chúng vào và xóa chúng khỏi mảng. (! Trừ khi bạn đang sử dụng ARC, tất nhiên) NSArray sẽ làm việc này cho bạn, nhưng với mảng C-phong cách, bạn cần phải làm điều gì đó như thế này để thay thế một mảng:
[strings[i][j] release];
strings[i][j] = [newString retain];
Sự khác biệt khác là bạn có thể đặt nil trong mảng kiểu C, nhưng không phải là NSArrays - bạn cần sử dụng NSNull cho điều đó. Ngoài ra, hãy xem câu hỏi về Stack Overflow Cocoa: Memory management with NSString để biết thêm về quản lý bộ nhớ NSString.
+1 để tiết kiệm cho tôi rất nhiều đánh máy. – Abizern
Nếu bạn muốn khai báo và khởi tạo một mảng hai chiều của chuỗi, bạn có thể làm điều này:
NSArray *myArray = [NSArray arrayWithObjects:
[NSArray arrayWithObjects:@"item 1-1", @"item 1-2", nil],
[NSArray arrayWithObjects:@"item 2-1", @"item 2-2", nil],
[NSArray arrayWithObjects:@"item 3-1", @"item 3-2", nil],
[NSArray arrayWithObjects:@"item 4-1", @"item 4-2", nil],
nil];
này có lợi ích đem lại cho bạn một mảng bất biến.
hi Steve McLeod, làm thế nào tôi có thể nhận được giá trị của "mục 1-1" nếu tôi có myArray như thế này. –
[[myArray objectAtIndex: 1] objectAtIndex: 1] – Hackmodford
Tôi có thể tự quảng cáo nhưng tôi đã viết một trình bao bọc trên NSMutableArray
trước khi sử dụng dễ dàng dưới dạng mảng 2D. Nó có sẵn trên GitHub dưới dạng CRL2DArray
tại đây. https://github.com/tGilani/CRL2DArray
Xuất phát từ Android (Java) Tôi ngạc nhiên về việc tạo ra một mảng 2D trong obj-C rất khó khăn như thế nào, cảm ơn GitHub rất hữu ích! –
Vấn đề duy nhất là tôi ước có nhiều phương pháp được xây dựng sẵn hơn mà một NSArray bình thường giống như đếm, vv Nhưng bây giờ tôi sẽ tự làm điều đó! –
- 1. Làm cách nào để khai báo mảng hai chiều trong javascript?
- 2. Làm thế nào để chuyển đổi hai mảng chiều để một mảng chiều trong php5
- 3. Làm thế nào để khai báo một giá trị enum như đang bị phản đối trong ObjectiveC (2.0)
- 4. cách khai báo mảng hai chiều và các phần tử của chúng trong VHDL
- 5. Làm thế nào để có được chiều dài của chuỗi dài nhất trong một mảng
- 6. Làm thế nào để khai báo chuỗi trong C
- 7. in mảng hai chiều của chuỗi thành chuỗi
- 8. Mảng hai chiều trong python
- 9. chuyển đổi mảng hai chiều thành chuỗi
- 10. Làm thế nào để in một mảng 2 chiều Perl?
- 11. Làm thế nào để khai báo một loạt các kiểu dữ liệu khác nhau
- 12. Làm thế nào để truyền một mảng hai chiều đến một hàm trong C++
- 13. Làm thế nào để khai báo một biến trong MySQL?
- 14. Làm thế nào để khai báo một chuỗi rỗng trong XAML ResourceDictionary
- 15. Làm thế nào để bạn khai báo một mảng const của con trỏ hàm?
- 16. Làm cách nào để tạo một mảng hai chiều nguyên thủy (2d) trong Clojure?
- 17. Làm thế nào để tìm các khu vực trong mảng hai chiều một cách hiệu quả?
- 18. Làm thế nào để loại bỏ một hàng trong mảng hai chiều
- 19. Làm thế nào để khai báo một kiểu là nullable trong TypeScript?
- 20. push() một mảng hai chiều
- 21. Làm thế nào để có được kiểu khai báo con từ một biểu thức?
- 22. Sử dụng typedef cho mảng để khai báo kiểu mới
- 23. Làm thế nào để khai báo rõ ràng kiểu của một thành viên var trong một lớp php
- 24. Làm thế nào để bạn khai báo một mảng đối tượng trong Java?
- 25. Làm thế nào để khai báo một mảng đối tượng động trong Java?
- 26. Làm thế nào để khai báo một mảng 2D có kích thước thay đổi trong C?
- 27. ObjectiveC: nơi khai báo các đặc tính cá nhân?
- 28. Làm thế nào để đối phó với mảng (được khai báo trên ngăn xếp) trong C++?
- 29. Tạo một mảng hai chiều trong Objective-C
- 30. Làm thế nào để tải kết quả MySQLi được đặt thành mảng hai chiều?
Nếu bạn đang nói đến mảng NS (Mutable), bạn không "khai báo" nó. NSArray không có kiểu nội dung được chỉ định, vì vậy bạn chỉ cần khai báo mảng bên ngoài. Cách bạn sử dụng tùy thuộc vào bạn. –