Tôi có một mảng trống có thể thay đổi. Có thể chèn đối tượng tại chỉ mục 2 chẳng hạn, trong khi không có gì ở chỉ mục 0 và 1 không? Tôi có nghĩa là để tăng năng lực động hoặc một cái gì đó như thế. .Trân trọng.NSMutableArray chèn đối tượng tại chỉ số
Trả lời
NSMutableArray
không phải là mảng thưa thớt; nó không cho phép các vùng trống có thể được điền sau này. initWithCapacity:
chỉ gợi ý cho mảng rằng nó sẽ được lấp đầy với một số tiền nhất định; nó không phải là cần thiết trong thực tế và, trừ khi bạn biết chính xác có bao nhiêu mục bạn sẽ xô trong mảng, đừng bận tâm gọi nó (chỉ cần sử dụng init
).
Mảng có thể thay đổi sẽ phát triển khá hiệu quả khi kích thước đối tượng được thêm vào.
Nếu bạn cần cấu trúc dữ liệu hỗ trợ "lỗ", thì hãy sử dụng thứ gì đó khác hoặc đặt đối tượng giữ chỗ trong các vị trí được cho là trống.
I.e. nếu bạn muốn có một mảng với 10 khe cắm, bạn có thể làm:
NSMutableArray *a = [NSMutableArray array];
for(int i = 0; i<10; i++) [a addObject: [NSNull null]];
Sau đó bạn có thể kiểm tra nếu đối tượng lấy isEqual: [NSNull null]
biết nếu các khe trống hay không. Và bạn có thể sử dụng replaceObjectAtIndex:withObject:
để gắn một đối tượng vào một chỉ mục cụ thể.
Hoặc bạn có thể sử dụng cấu trúc dữ liệu khác; một từ điển với các chỉ mục như các phím sẽ hoạt động, ví dụ.
Bạn có thể thêm một vài phương thức thể loại để tự động nối thêm các đối tượng 'NSNull' khi cần và kiểm tra xem một phần tử là đối tượng null và trả về nil thay thế. Đây là cách tôi đã làm nó: http://cutecoder.org/programming/behold-holy-array/ – adib
Bạn có thể sử dụng NSPointerArray cho điều đó.
NSPointerArray là một bộ sưu tập có thể thay đổi mô hình sau NSArray nhưng nó cũng có thể giữ các giá trị NULL, mà có thể là chèn hoặc chiết xuất (và đó góp phần count của đối tượng). Hơn nữa, không giống như các mảng truyền thống, bạn có thể đặt số đếm của mảng trực tiếp.
NSPointerArray
có sẵn trong OS X v10.5 và sau đó và iOS 6.0 và sau này. Nếu bạn nhắm mục tiêu một phiên bản thấp hơn hệ điều hành bạn có thể, ví dụ:
Sử dụng một
NSMutableDictionary
, quấn bạn chỉ số thànhNSNumber
s và sử dụng các phím như.Sử dụng
NSMutableArray
và điền vào "lỗ" với các đối tượngNSNull
.
Yup; Tôi nên đề cập đến điều này. NSPointerArray là một lớp học rất hữu ích! Tuy nhiên, NSPointerArray không khả dụng trên iOS IIRC. – bbum
Đúng. Tôi đã kiểm tra xem câu hỏi đã được gắn thẻ iOS hay chưa nhưng vì nó không phải là ... – albertamg
NSPointerArray có sẵn trên iOS 6 trở lên. – quellish
Tự viết cho mình một lớp SparseArray sử dụng NSMutableDictionary cơ bản. Một cái gì đó như thế này (mã tối thiểu, hầu như không được kiểm tra, nhưng nó sẽ cho bạn ý tưởng).
@interface SparseArray : NSObject {
@private
NSMutableDictionary* _dict;
int count;
}
-(SparseArray*)initWithCapacity:(NSUInteger)anInt;
-(id)objectAtIndex:(int)anIndex;
-(void)insertObject:(id)anObject atIndex:(int)anIndex;
- (void)removeObjectAtIndex:(int)anIndex;
-(int)count;
@implementation SparseArray
-(SparseArray*)initWithCapacity:(NSUInteger)anInt {
if ((self = [super init])) {
_dict = [[NSMutableDictionary dictionaryWithCapacity:anInt] retain];
count = 0;
}
return self;
}
-(id)objectAtIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
id object = [_dict objectForKey:key];
return object;
}
-(void)insertObject:(id)anObject atIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
[_dict setObject:anObject forKey:key];
count++;
}
- (void)removeObjectAtIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
id object = [_dict objectForKey:key];
if (object) {
[_dict removeObjectForKey:key];
count--;
}
}
-(int)count {
return count;
}
-(void)dealloc {
[_dict release];
[super dealloc];
}
@end
Thật không may, đối tượng này không hỗ trợ liệt kê nhanh. Thậm chí nếu bạn đã thêm nó bằng cách chấp nhận 'NSFastEnumeration', việc thực thi sẽ rất kém hiệu quả hoặc sẽ không đảm bảo việc liệt kê sẽ được sắp xếp (như bạn mong đợi từ một đối tượng mảng). – jhabbott
- 1. Đối tượng tại chỉ số trong NSArray
- 2. có được các đối tượng trong NSMutableArray
- 3. cách thêm đối tượng vào NSMutableArray
- 4. Xóa đối tượng cuối cùng trong NSMutablearray
- 5. thêm đối tượng NSInteger để NSMutableArray
- 6. Loại bỏ đối tượng từ NSMutableArray
- 7. Tại sao ParameterizedThreadStart chỉ cho phép tham số đối tượng?
- 8. Sắp xếp NSMutableArray theo thuộc tính của đối tượng
- 9. elasticsearch chèn các đối tượng vào chỉ mục
- 10. Thêm đối tượng để sở hữu một NSMutableArray
- 11. Thêm số nguyên vào NSMutableArray
- 12. Sắp xếp NSMutableArray với các đối tượng tùy chỉnh khác NSMutableArray
- 13. Số NSMutableArray luôn trả về số không
- 14. Sắp xếp NSmutableArray có chứa 2 loại đối tượng?
- 15. Lưu/Ghi NSMutableArray của đối tượng vào đĩa?
- 16. cách thêm đối tượng đa NSArray vào một NSMutableArray
- 17. objective-c: Cách cập nhật đối tượng trong NSMutableArray?
- 18. Số quan sát trong NSMutableArray
- 19. Có removeObject giải phóng đối tượng trong một NSMutableArray của các đối tượng không?
- 20. NSMutableArray removeObjectAtIndex: ném ngoại lệ đối số không hợp lệ
- 21. Chèn đối tượng (jquery) chậm trễ?
- 22. Tại sao == đúng đối với một số đối tượng Integer?
- 23. Cách thay đổi giá trị của NSMutableArray tại một chỉ mục cụ thể
- 24. Chèn đối tượng datetime.datetime Python vào MySQL
- 25. NSMutableArray - Lấy số nguyên chỉ mục mảng bằng cách tìm kiếm bằng chuỗi
- 26. C# đối tượng chỉ đọc
- 27. số phần tử trong NSMutableArray
- 28. Chỉ số python dict theo đối tượng hoặc hai phao
- 29. Cách chỉ reindex một số đối tượng trong Sunspot Solr
- 30. Làm cách nào để kiểm tra xem một đối tượng có tồn tại ở một chỉ mục nào đó của NSMutableArray không?
Hmm lý do tại sao bạn sẽ muốn làm điều đó? :) – Mikael
Tôi cần nó cho dự án mini của tôi ở trường đại học.:) – GeRyCh