2012-06-24 8 views
5

¿Hay una manera más agradable para llenar una matriz con los números que lo que yo uso? Es una locura lo mucho que llegué a escribir sólo para llenar una matriz con los números para que puedan ser utilizados para un cálculo en un bucle. Esto es más fácil en otros lenguajes basados ​​en C como PHP, As3 o Java.Objetivo C - matriz con números

NSArray *myArray = [NSArray arrayWithObjects: 
        [NSNumber numberWithInt:1000],[NSNumber numberWithInt:237], [NSNumber numberWithInt:2673], nil]; 

int total = 0; 
for(int i = 0; i < [myArray count]; i += 1){ 
    total += [[myArray objectAtIndex: i]intValue]; 
    NSLog(@"%i", total); 
} 

Con suerte hay un camino más corto ... yo sólo quiero llenar una matriz con enteros ... no puede ser tan difícil

+2

Ninguno de esos idiomas está "basado en C". –

+0

Para algunas cosas que desea objetos 'NSNumber', que pueden ser almacenadas en colecciones y automáticamente codificado/descodificado a corrientes de archivos/red, etc. Para otras cosas que usted puede desear buenos viejos enteros de C en una matriz C, para las operaciones de búsqueda súper rápida y uso (por ejemplo, una tabla de frecuencias en una función de procesamiento de audio). En Objective-C puede elegir cuál es el más apropiado, admite ambos. – jhabbott

Respuesta

10

supongo que tiene que usar para una NSNumber NSArray. Si desea utilizar enteros, supongo que tendría que utilizar una matriz c:

NSInteger myArray[20]; 

for (int i=0;i<20;i++) { 
    int num=myArray[i]; 

    //do something 
} 

NSNumber sin embargo, es que supongo que el mejor enfoque para este idioma. al menos se puede hacer la enumeración rápida para acortar un poco su código:

for (NSNumber *n in myArray) { 
int num = [n intValue]; 

//do something.... 

} 

EDIT:

La pregunta se ha hecho hace 3 años. Ha habido nuevos literales establecidos para que sea más fácil para crear objetos como NSNumbers o NSArrays:

NSNumber *n = @100; 

o

NSArray *array = @[@100,@50,@10]; 
+0

GRACIAS MARIO ... – mogio

+0

no es un problema ... no dude en aceptar :) – Mario

+0

La sintaxis literal descrita ya está disponible: http://clang.llvm.org/docs/ObjectiveCLiterals.html –

0

Una agradable alternativa abreviatura de bucles enteros específicos:

NSArray *numbers = [@"1000,237,2673" componentsSeparatedByString:@","]; 
for (NSString *i in numbers) { 
    [i intValue]; // Do something. 
} 
+0

manera interesante ... gracias Anne! – mogio

0

primera apertura con una matriz C:

NSInteger myCArray = { 1000, 237, 2673 }; 
// calculate number of elements 
NSUInteger myCArrayLength = sizeof(myCArray)/sizeof(NSInteger; 

En segundo lugar, si necesita un bucle NSArray a través de esta matriz y crear uno:

NSMutableArray *myNSArray = [NSMutableArray arrayWithCapacity:myCArrayLength]; 
for(NSUInteger ix = 0; ix < myCArrayLength; ix++) 
    [myNSArray addObject:[NSNumber numberWithInteger:myCArray[ix]]; 

se puede envolver la segunda pieza de código como una categoría en NSArray si está haciendo mucho.

0

demasiado tarde. pero puedes hacer lo siguiente también.

int total = 0; 
nsarray *myArray = @[@1.8,@100,@299.8]; 
for(nsnumber *num in myArray){ 
total+=num; 
} 
+0

Parece que esta sintaxis se cubre en la respuesta aceptada ya - ¿Qué valor de ponerlo de nuevo tiene? – Krease