2011-06-28 49 views
-1

我需要創建一個名爲BigArray的數組。 BigArray需要包含來自下面數組的單詞。如何創建這個數組?

有三個數組稱爲「用戶」。每個這樣的陣列中有某些詞,如:

用戶1:貓,狗,蝙蝠

Users2:蘋果,芒果,香蕉,梨

Users3:大,小

我想以下列方式在BigArray中安排以上單詞: 貓,蘋果,大,狗,芒果,小,蝙蝠,香蕉,梨

我該怎麼做?

+1

什麼是BigArray的填充背後的邏輯是什麼?何時使用哪個數組? – dasdom

+0

我需要通過從每個Users數組中依次選擇元素來創建BigArray。 – meetpd

回答

2

該解決方案將工作,即使你的用戶X陣列並不都具有相同尺寸

NSMutableArray BigArray = [[NSMutableArray alloc] init]; 
NSMutableArray u1 = [Users1 mutableCopy]; 
NSMutableArray u2 = [Users2 mutableCopy]; 
NSMutableArray u3 = [Users3 mutableCopy]; 
while ([u1 count] || [u2 count] || [u3 count]) { 
    if ([u1 count]) { 
     [BigArray addObject:[u1 objectAtIndex:0]]; 
     [u1 removeObjectAtIndex:0]; 
    } 
    if ([u2 count]) { 
     [BigArray addObject:[u2 objectAtIndex:0]]; 
     [u2 removeObjectAtIndex:0]; 
    } 
    if ([u3 count]) { 
     [BigArray addObject:[u3 objectAtIndex:0]]; 
     [u3 removeObjectAtIndex:0]; 
    } 
} 
[u1 release]; 
[u2 release]; 
[u3 release]; 
/* BigArray now contains what you need */ 
1
  1. 通過每個較小的陣列的創建NSMutable陣列FinalArray
  2. 運行
  3. 從每個較小的陣列中的索引0到n添加每個對象到FinalArray在相同的for循環。
0

想到的是一個溫和的複雜循環的第一件事情(也許還有一個更優雅方式,不知道)。

BOOL done = FALSE; 
NSArray *arrays = [NSArray arrayWithObjects:users1, users2, users3, nil]; 
NSArray *array; 
NSMutableArray *bigArray = [NSMutableArray arrayWithCapacity:users1.count+users2.count+users3.count]; 
int i = 0; 
int j; 
while (! done) { 
    done = TRUE; 
    for (j = 0; j < arrays.count; j++) { 
     array = [arrays objectAtIndex:j]; 
     if (i < array.count) { 
      [bigArray addObject:[array objectAtIndex:i]]; 
      done = FALSE; 
     } 
    } 

    i++; 
} 
1

看看這有助於

NSArray *a1 = [[NSArray alloc] initWithObjects:@"Cat", @"Dog", @"Bat",nil]; 
NSArray *a2 = [[NSArray alloc] initWithObjects:@"Apple", @"Mango", @"Banana", @"Pear",nil]; 
NSArray *a3 = [[NSArray alloc] initWithObjects:@"Big", @"Small",nil]; 
NSUInteger arrayLength = [a1 count]+[a2 count]+[a3 count]; 
NSMutableArray *finalMutableArray = [NSMutableArray arrayWithCapacity:(arrayLength)]; 
for (NSUInteger index = 0; index < [a2 count]; index++) { // take the size of the biggest array 
if(index < [a1 count]) 
    [finalMutableArray addObject:[a1 objectAtIndex:index]]; 
[finalMutableArray addObject:[a2 objectAtIndex:index]]; 
if(index < [a3 count]) 
    [finalMutableArray addObject:[a3 objectAtIndex:index]]; 
} 
NSArray *finalArray = [NSArray arrayWithArray:finalMutableArray]; 
[a1 release]; 
[a2 release]; 
[a3 release]; 
+0

你爲什麼要用arrayLength * numberOfArrays?你正在創建一個只有arrayLength元素的數組。 – vakio

+0

我正在更新我的答案。它的更新請現在檢查。 – visakh7

+0

現在看起來更好。你以前的代碼也工作得很好,我只是覺得它看起來有點偏離。 – vakio