2012-02-23 21 views
6

¿Hay alguna forma rápida de obtener el número de cadenas dentro de un conjunto NSString?Xcode: contar elementos en el conjunto de cadenas

NSString *s[2]={@"1", @"2"} 

Quiero recuperar la longitud de de esta. Hay algo así como (s.size) Sé que existe el método de la longitud, pero que es para una cadena, no una matriz de cadena. Soy nuevo en Xcode por favor sea amable.

Respuesta

19

Uso NSArray

NSArray *stringArray = [NSArray arrayWithObjects:@"1", @"2", nil]; 
NSLog(@"count = %d", [stringArray count]); 
+0

Sí, al final utilizaré una matriz mutable. Pero solo por curiosidad. ¿Realmente no hay forma de que puedas recuperar esta longitud? –

+2

En realidad, debe usar '[stringArray count]' ya que es un método de instancia y no una propiedad. – Rengers

+0

@Rengers Eso no hace ninguna diferencia. Una propiedad de solo lectura es exactamente lo mismo que un método de instancia. – Sulthan

1
sizeof(s)/sizeof([NSString string]); 
4

Sí, hay una manera. Tenga en cuenta que esto solo funciona si la matriz no se crea dinámicamente con malloc.


NSString *array[2] = {@"1", @"2"} 

//size of the memory needed for the array divided by the size of one element. 
NSUInteger numElements = (NSUInteger) (sizeof(array)/sizeof(NSString*)); 

Este tipo de matriz es típico para C, y desde Obj-C es superconjunto de C, es legal para usarlo. Solo tienes que ser extra cauteloso.

0

Ha intentado buscar _countf en objetivo-c, pero parece que no existe, por lo que suponiendo que sizeof y typeof operadores funcionen correctamente y pase una matriz c válida, entonces puede funcionar lo siguiente.

#define _countof(_obj_) (sizeof(_obj_)/(sizeof(typeof(_obj_[0])))) 

NSString *s[2]={@"1", @"2"} ; 
NSInteger iCount = _countof(s) ; 
Cuestiones relacionadas