如何为整个NSMutableArray分配单个值?

时间:2012-01-05 11:18:16

标签: iphone objective-c nsmutablearray nsarray

我有一个可变数组的20个对象。它的值为@"TRUE",@"FALSE",@"TRUE"...

现在我想重置数组的所有值为@"FALSE"。表示所有值均为@"FALSE" (20 times).

的数组

我知道如何添加,插入索引... 但我想知道如何在一个行中将整数组值设置为@“FALSE”??? `不使用循环并在索引处替换对象......?

例如:是否可能

thArray = [[NSMutableArray alloc] initWithCapacity:20];
theArray = @"FALSE" ;

...谢谢

5 个答案:

答案 0 :(得分:4)

你能用C数组吗?如果是这样,您可以使用{0, 1}作为{FALSE, TRUE}的C等价物,用以下内容初始化C数组:

unsigned short int cArray[20] = {0};

或:

static unsigned short int cArray[20]; /* all values are zeroes, or FALSEs */

这可能更有效,而不是像现在这样使用static NSString * const元素数组。测试两个整数是否相等通常比测试两个字符串的字典对等更快,其中您的程序必须逐个字符地比较每个字符串。

要重置数组的内容,可以使用C函数memset()

memset(cArray, 0, 20*sizeof(unsigned short int)); /* set all values of cArray to 0 */

如果您需要动态大小的数组,请使用带有calloc()的指针,并使用memset()重置它,如前所述。请记住事后free()指针,这样就不会出现内存泄漏:

unsigned short int *cArray = NULL;
size_t cArrayLength = 20; /* can be passed in as a value from another method, etc. */
cArray = calloc(cArrayLength, sizeof(unsigned short int)); /* values are initialized to 0 */
if (cArray) {
    /* use cArray... */
    *(cArray + 8) = 1; /* e.g., set ninth element with the value of 1 */
    /* we don't need cArray any longer, so we free it */
    free(cArray);
}
else
    /* error */

如果您必须在NSString *NSNumber *中使用带有NSArrayNSMutableArray个实例的Objective-C,则没有现成的初始化方法,您将会需要使用循环或复制预先存在的数组,如Justin的回答中所述。他也是正确的,如果你想朝着这个方向前进,那么创建和填充数组的方法是个好主意。

答案 1 :(得分:1)

如果那些是数组中的可变字符串,你可以只用一行来完成:

[theArray makeObjectsPerformSelector:@selector(setString:) withObject:@"FALSE"];

答案 2 :(得分:1)

这是一种方式:

NSArray * initialized = ...array with fifty @"FALSE" values...;
NSMutableArray * a = [initialized mutableCopy];
... mutate a ...
[a setArray:initialized];

如果您实际处理bool值,C标量会更快(请参阅Alex的回答)。

另一种选择是CFMutableBitVector

最后,这也是创建函数的好例子。

答案 3 :(得分:0)

1)Either this

2)Or this

否则没有循环就没办法了。

答案 4 :(得分:-1)

我知道的唯一方法是

  for(int i = 0;i<[theArray count];i++)
    {[theArray replaceObjectAtIndex:i withObject:@"FALSE"];}