2012-01-05 32 views
0

我有一個可變的數組,說20個對象。它有像@"TRUE",@"FALSE",@"TRUE"...如何爲整個NSMutableArray指定一個值?

現在我想重置數組的所有值到@"FALSE"。指具有所有值@"FALSE" (20 times).

我知道如何添加陣列,插入索引...... 但我想知道,我怎樣才能在唱歌線設置整個數組值@「FALSE」 ??? `沒有使用循環並在索引處替換對象...?

例如:是否有可能

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

謝謝...

+1

我很好奇你爲什麼不想爲此使用循環。 – sosborn 2012-01-05 11:24:37

+1

你的例子中的第二條語句將指針設置爲指向一個字符串,這是行不通的。 – 2012-01-05 11:25:11

+0

@sosborn:b'coz我有7個數組,每個數組至少有50個對象,我必須單擊重置這些數組。 – Maulik 2012-01-05 11:26:23

回答

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

如果必須在NSArrayNSMutableArray使用的Objective-C與NSString *NSNumber *情況下,沒有現成的方法進行初始化,您需要使用循環或複製預先存在的數組,如Justin的答案中所述。如果你想朝這個方向努力,那麼創建和填充陣列的方法是一個好主意,他也是正確的。

+0

否則,可以使用一個包含布爾值的NSNumber。 – 2012-01-05 11:28:37

+0

謝謝...我應該試試這個.. – Maulik 2012-01-05 11:28:56

+0

@亞歷克斯:謝謝你的更新 – Maulik 2012-01-11 04:25:34

-1

唯一的辦法,我知道是

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

感謝您的回覆,但仔細閱讀問題我已經提到,我不想使用循環! – Maulik 2012-01-05 11:23:12

+0

我知道,但那是你能做到的唯一方法。至少這是我知道如何的唯一方法 – Radu 2012-01-05 11:24:48

+3

這是行不通的。這是Objective-C,而不是C++。改爲使用'replaceObjectAtIndex:withObject:'。 – 2012-01-05 11:25:48

1

如果那些是數組內可變字符串,你可以在短短的一行做到這一點:

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

這裏有一種方法:

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

如果您在實際處理布爾值,C標量會更快(見Alex的答案)。

另一種選擇是CFMutableBitVector

最後,這也是創建函數的好例子。

+1

簡單方法相同...「 – Maulik 2012-01-05 12:09:21

相關問題