Tengo una matriz mutable vacía. ¿Es posible insertar objetos en el índice 2, por ejemplo, mientras que no hay nada en el índice 0 y 1? Me refiero a aumentar la capacidad de forma dinámica o algo así. .Saludos.NSMutableArray insertar objeto en el índice
Respuesta
NSMutableArray
no es una matriz dispersa; no permite ranuras vacías que pueden rellenarse más tarde. initWithCapacity:
solo indica a la matriz que se llenará hasta una cierta cantidad; generalmente no es necesario en la práctica y, a menos que sepa exactamente cuántos elementos va a meter en el conjunto, no se moleste en llamarlo (solo use init
).
Una matriz mutable crecerá de manera bastante eficiente a medida que se agreguen los objetos.
Si necesita una estructura de datos que admita "agujeros", entonces use algo diferente o coloque un objeto marcador en las ranuras que se supone que están vacías.
I.e. si quería una matriz con 10 ranuras, es posible hacer:
NSMutableArray *a = [NSMutableArray array];
for(int i = 0; i<10; i++) [a addObject: [NSNull null]];
entonces usted puede comprobar si el objeto recuperado isEqual: [NSNull null]
para saber si la ranura está vacía o no. Y puede usar replaceObjectAtIndex:withObject:
para pegar un objeto en un índice específico.
O podría utilizar una estructura de datos diferente; un diccionario con los índices como las teclas funcionarían, por ejemplo.
Puede agregar un par de métodos de categoría para anexar automáticamente objetos 'NSNull' según sea necesario y verificar si un elemento es el objeto nulo y devuelve nil en su lugar. Así es como lo hice: http://cutecoder.org/programming/behold-holy-array/ – adib
Puede usar un NSPointerArray para eso.
NSPointerArray es una colección mutable modelado después NSArray pero también puede contener valores NULL, que pueden ser inserta o extrae (y que contribuyen a la cuenta del objeto). Además, a diferencia de las matrices tradicionales, , puede establecer el recuento de la matriz directamente.
NSPointerArray
está disponible en OS X v10.5 y posterior y iOS 6.0 y versiones posteriores. Si se dirige a una versión anterior del sistema operativo se puede, por ejemplo:
Utilice un
NSMutableDictionary
, en que se coloca en los índicesNSNumber
s y utilizar estos como claves.Usa un
NSMutableArray
y llena los "agujeros" conNSNull
objetos.
Sí; Debería haber mencionado esto. ¡NSPointerArray es una clase tremendamente útil! Sin embargo, NSPointerArray no está disponible en iOS IIRC. – bbum
cierto. Verifiqué si la pregunta estaba etiquetada como iOS, pero dado que no es ... – albertamg
NSPointerArray está disponible para iOS 6 y versiones posteriores. – quellish
Escriba usted mismo una clase SparseArray usando un NSMutableDictionary subyacente. Algo como esto (código mínimo, apenas probado, pero debería darle la idea).
@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
Desafortunadamente, este objeto no admite la enumeración rápida. Incluso si lo agregó al adoptar 'NSFastEnumeration', la implementación sería muy ineficiente o no garantizaría que se ordenara la enumeración (como se esperaría de un objeto de matriz). – jhabbott
- 1. Agregar un objeto a un índice específico de un NSMutableArray
- 2. elasticsearch insertar objetos en el índice
- 3. Cómo reemplazar un objeto en un NSMutableArray en un índice dado con un nuevo objeto
- 4. NSMutableArray removeObjectAtIndex
- 5. NSMutableArray compruebe si el objeto ya existe
- 6. Extracción de objeto desde NSMutableArray
- 7. añadiendo objeto NSInteger a NSMutableArray
- 8. Tamaño total del objeto NSMutableArray
- 9. ¿Cómo puedo verificar si existe un objeto en un determinado índice de un NSMutableArray?
- 10. obtener objetos en NSMutableArray
- 11. Objeto en el índice en NSArray
- 12. ¿removeObject libera el objeto en un NSMutableArray de objetos?
- 13. Adición de objeto de C++ en el NSMutableArray
- 14. objetivo-c: cómo actualizar el objeto en NSMutableArray?
- 15. NSMutableArray - Obtener matrices índice entero buscando con una cadena
- 16. Cómo cambiar el valor de un NSMutableArray en un índice particular
- 17. Ordenar NSMutableArray Por propiedad del objeto
- 18. cómo agregar un objeto a NSMutableArray
- 19. Compruebe si los datos están presentes en un índice en NSMutableArray
- 20. Insertar objeto python en mongodb
- 21. Inicializar NSMutableArray: [NSMutableArray matriz];
- 22. Subarreglo de NSMutableArray
- 23. Insertar un objeto SVG con el parámetro
- 24. Guardar NSMutableArray en el disco
- 25. ¿Cómo obtengo el índice de un objeto en un NSArray usando el valor de cadena?
- 26. ¿Cómo acceder al índice en el objeto IEnumerable en C#?
- 27. Cómo insertar tipo de objeto en ListView?
- 28. Obtener el índice del objeto en la matriz para buscar el objeto correspondiente en otra matriz
- 29. Drupal 7 - Insertar taxonomía en el objeto nodo
- 30. ¿hay alguna manera de insertar el objeto QPixmap en html?
Hmm ¿Por qué quieres hacer eso? :) – Mikael
Lo necesito para mi mini proyecto en la universidad.:) – GeRyCh