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

Iphone 如何为整个NSMutableArray分配单个值?,iphone,objective-c,nsmutablearray,nsarray,Iphone,Objective C,Nsmutablearray,Nsarray,我有一个可变数组,比如说20个对象。它的值有如@“TRUE”、@“FALSE”、@“TRUE”… 现在我想将数组的所有值重置为@“FALSE”。表示所有值均为“FALSE”(20次)的数组。 我知道如何添加,插入索引但我想知道如何在单行中将整个数组值设置为@“FALSE”`在索引处不使用循环和替换对象 例如:可能吗 thArray = [[NSMutableArray alloc] initWithCapacity:20]; theArray = @"FALSE" ; 谢谢…我知道的唯一方法是

我有一个可变数组,比如说20个对象。它的值有如
@“TRUE”、@“FALSE”、@“TRUE”…

现在我想将数组的所有值重置为
@“FALSE”
。表示所有值均为“FALSE”(20次)的数组。

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

例如:可能吗

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

我知道的唯一方法是

  for(int i = 0;i<[theArray count];i++)
    {[theArray replaceObjectAtIndex:i withObject:@"FALSE"];}
for(inti=0;i我知道的唯一方法是

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

(二)

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

1)

(二)


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

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

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

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

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

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

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 */

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

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

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

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

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

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

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 */

如果您必须在
NSArray
NSMutableArray
中的
NSString*
NSNumber*
实例中使用Objective-C,则没有现成的初始化方法,您需要使用循环或复制预先存在的数组,如Justin的回答所述。他还正确地认为,如果您想朝这个方向发展,创建和填充数组的方法是一个好主意。

如果数组中的字符串是可变的,您可以在一行中完成:

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

如果这些是数组中的可变字符串,则只需一行即可完成:

[theArray makeObjectsPerformSelector:@selector(setString:) withObject:@"FALSE"];
这里有一个方法:

NSArray * initialized = ...array with fifty @"FALSE" values...;
NSMutableArray * a = [initialized mutableCopy];
... mutate a ...
[a setArray:initialized];
如果您实际处理的是bool值,那么C标量将更快(参见Alex的答案)

另一种选择是
CFMutableBitVector

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

这里有一种方法:

NSArray * initialized = ...array with fifty @"FALSE" values...;
NSMutableArray * a = [initialized mutableCopy];
... mutate a ...
[a setArray:initialized];
如果您实际处理的是bool值,那么C标量将更快(参见Alex的答案)

另一种选择是
CFMutableBitVector



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

感谢您的回复,但请仔细阅读问题,我已经提到我不想使用循环!!!我知道,但这是你唯一能做到的。至少这是我知道这怎么不起作用的唯一方法。这是ObjtoC,不是C++。使用
replaceObjectAtIndex:withObject:
代替。感谢您的回复,但请仔细阅读问题我已经提到我不想使用循环!!!我知道,但这是你唯一能做到的。至少这是我知道这怎么不起作用的唯一方法。这是ObjtoC,不是C++。请改用
replaceObjectAtIndex:withObject:
。我很好奇您为什么不想为此使用循环。示例中的第二条语句将指针设置为指向字符串,但该字符串无效。@sosborn:b'z因为我有7个数组,每个数组至少有50个对象,我必须在单个数组上重置这些数组click@WTP字体是的,我知道。。这只是一个例子example@Maulik,好的,但我不明白为什么这意味着你不应该使用循环。你担心速度吗?如果是这样,不要。只需花5分钟让它与循环一起工作,然后查看是否存在任何性能问题。我猜你不会看到任何东西。我很好奇为什么你不想使用循环来实现这一点。示例中的第二条语句将指针设置为指向一个字符串,这不起作用。@sosborn:b'z因为我有7个数组,每个数组至少有50个对象,我必须在单个数组上重置这些数组click@WTP字体是的,我知道。。这只是一个例子example@Maulik,好的,但我不明白为什么这意味着你不应该使用循环。你担心速度吗?如果是这样,不要。只需花5分钟让它与循环一起工作,然后查看是否存在任何性能问题。我猜你不会看到任何。否则,可以使用一个包含布尔值的NSNumber。你能解释一下这个语句吗*(cArray+8)=1?您正在解除对
cArray
指向的第九个内存位置的引用,以便设置该内存位置的值。实际上,,