我有一个可变数组的20个对象。它的值为@"TRUE",@"FALSE",@"TRUE"...
现在我想重置数组的所有值为@"FALSE"
。表示所有值均为@"FALSE" (20 times).
我知道如何添加,插入索引... 但我想知道如何在一个行中将整数组值设置为@“FALSE”??? `不使用循环并在索引处替换对象......?
例如:是否可能
thArray = [[NSMutableArray alloc] initWithCapacity:20];
theArray = @"FALSE" ;
...谢谢
答案 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 *
中使用带有NSArray
或NSMutableArray
个实例的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)
答案 4 :(得分:-1)
我知道的唯一方法是
for(int i = 0;i<[theArray count];i++)
{[theArray replaceObjectAtIndex:i withObject:@"FALSE"];}