Si desea crear una matriz de enteros, ¿puede usar NSInteger? ¿Tienes que usar NSNumber? Si es así, ¿por qué?Creación de una matriz de enteros en iOS
Respuesta
Se puede utilizar una llanura matriz de edad C:
NSInteger myIntegers[40];
for (NSInteger i = 0; i < 40; i++)
myIntegers[i] = i;
// to get one of them:
NSLog (@"The 4th integer is: %d", myIntegers[3]);
O bien, puede utilizar un NSArray
o NSMutableArray
, pero aquí tendrá que terminar cada entero dentro de una instancia NSNumber
(porque NSArray
objetos están diseñados para mantener instancias de clase).
NSMutableArray *myIntegers = [NSMutableArray array];
for (NSInteger i = 0; i < 40; i++)
[myIntegers addObject:[NSNumber numberWithInteger:i]];
// to get one of them:
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);
// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
Creo que vale la pena señalar que las matrices en C son una molestia para cualquier cosa que no sea trivial, el uso de una sola vez que en realidad es menos problemas para envolver las matrices que planea mantener como NSArrays de NSNumber. – Chuck
Sí, y dadas las [presumiblemente] optimizaciones de nivel experto bajo el capó de 'NSArray', estoy seguro de que no sentirán el rendimiento alcanzado. – dreamlax
@dreamlax Me pregunto qué tipo de optimización de nivel experto está bajo el capó de NSArray. ¿Asignación inteligente de memoria que simplemente duplica el tamaño de la memoria asignada una vez que llega al límite? :) p – Andy
Si desea utilizar un NSArray, necesita una clase de Objective-C para poner en él - de ahí la necesidad NSNumber.
Dicho esto, Obj-C sigue siendo C, por lo que puede utilizar matrices C normales y realizar operaciones regulares en lugar de NSNumbers si es necesario.
Puede usar CFArray en lugar de NSArray. Here es un artículo que explica cómo.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Lo mismo se aplica a la versión CoreFoundation de los otros contenedores también.
Si hay una ventaja de usar CFArray sobre NSArray, no lo veo. Un NSArray ES un CFArray bajo el capó; esto es solo hacerlo de la manera difícil. –
@Cryptognome hay una pequeña diferencia aquí, el CFArray no retendrá o lanzará nada porque fue creado sin devoluciones de llamada. Aunque estoy de acuerdo, no parece haber ninguna ventaja. – dreamlax
Creo que es mucho más fácil usar NSNumbers. Esta todo lo que tiene que hacer:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
creé un simple envoltorio Objetivo C en torno a la buena gama de edad C para ser utilizado con mayor comodidad: https://gist.github.com/4705733
Si no se requiere el orden de los números enteros, y si hay sólo valores únicos
también puede utilizar NSIndexSet o NSMutableIndexSet podrá añadir y eliminar fácilmente los números enteros, o comprobar si su matriz contiene un entero con
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Compruebe el documentation para obtener más información.
Esa es una idea terrible. Aquí hay una pieza de la documentación de Apple: _No debe usar conjuntos de índices para almacenar una colección arbitraria de valores enteros porque el índice establece índices de tiendas como rangos ordenados. Esto los hace más eficientes que almacenar una colección de enteros individuales. También significa que cada valor de índice solo puede aparecer una vez en el conjunto de índices. –
Acepto y es por eso que comencé mi respuesta con una advertencia. Sin embargo, conozco a algunas personas que hacen esta pregunta acerca de las matrices de enteros, y realmente necesitaban un conjunto de índices. Es por eso que di esta respuesta alternativa. –
¿Qué pasa con solo un 'NSSet' normal (y el uso de enteros incluidos en un' NSNumber')? – dreamlax
C array:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C matriz:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
matriz Swift:
var array = [1, 2, 3, 4, 5, 6]
Esto es correcto demasiado:
var array = Array(1...10)
NB: las matrices están fuertemente tipadas en Swift; en ese caso, el compilador infiere del contenido que la matriz es una matriz de enteros.Se podría utilizar esta sintaxis de tipo explícito, también:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Si quería una serie de dobles, se debería utilizar:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
o:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
- 1. Interlocked.Increment una matriz de enteros
- 2. JavaScript - Ordena una matriz basada en otra matriz de enteros
- 3. Cómo rotar una matriz 2D de enteros
- 4. Cómo crear una matriz dinámica de enteros
- 5. Creación de una matriz entera de ID de recursos
- 6. iOS: Creación de una brújula 3D
- 7. Ordenar una matriz de enteros 2D basada en una columna
- 8. C# Creación de una matriz de matrices
- 9. Buscar en matriz de enteros en Postgres
- 10. Cálculo de la suma de números enteros en una matriz
- 11. Almacenamiento de una matriz de valores enteros en SQL Server
- 12. Java: Lectura de enteros de un archivo en una matriz
- 13. Cómo definir duro en código de una matriz de enteros [] []
- 14. matriz de enteros o matriz de estructuras: ¿cuál es mejor?
- 15. ¿Convertir una matriz de enteros en una matriz de cadenas en Ruby?
- 16. convertir cadena en matriz de enteros
- 17. creación de matriz numpy con una secuencia
- 18. Ordenar archivos por fecha de creación - iOS
- 19. la creación de una matriz triangular
- 20. ¿Cómo crear una matriz de enteros en Python?
- 21. ¿Cómo crear una matriz con secuencia de enteros en C#?
- 22. 0-1 Mochila en una matriz de enteros infinitos?
- 23. ¿Cómo puedo almacenar una matriz de enteros en SharedPreferences?
- 24. Cómo resumir una matriz de enteros en C#
- 25. Creación de miniaturas para video en iOS
- 26. ¿Puede una matriz contener enteros y flotantes?
- 27. Empaquetado de bits de una matriz de enteros
- 28. Creación de Matriz de indicadores
- 29. Creación de permutaciones de una matriz multidimensional en Ruby
- 30. Eliminar duplicados de una matriz de enteros grandes utilizando Java
Qué hacer quieres hacer con tu matriz de enteros? – dreamlax
No estoy seguro. Acabo de enterarme de que debes usar NSNumber para las matrices, así que me preguntaba sobre eso. – neuromancer