2014-09-23 140 views
0

我有嵌套Arrays迭代通过嵌套阵列抓住每个阵列,则第二的第一个目的,等等

例如:

[[1,2,3,4,5], [A,B,C,d,E],[Z,Y,X,W,V]

我想通过这个数组进行迭代,并创建一个新的数组,看起来像这样:

[ 1,A,Z,2,B,Y,3,C,X,4,D,W,5,E,V]

I wa ŝ最初考虑使用嵌套循环For的,例如:

int index = 0; 
    int stop = [[arrays objectAtIndex:0] count]; 
    NSMutableArray* finalArray = [NSMutableArray new]; 
    while(index < stop) 
    { 
     for(id array in images) 
     { 
     [finalArray addObject:[array objectAtIndex:index]]; 
     } 
     index++; 
    } 

什么是这样做的最有效的方法是什么?

回答

1

我不相信你的代码会真正产生你的意思(它不会实际编译,因为NSArray没有addObject:)。你想要的是拉链:

NSArray *Zip(NSArray *arrays) { 
    if ([arrays count] == 0) { 
    return @[]; 
    } 

    NSMutableArray *result = [NSMutableArray new]; 

    NSInteger minCount = NSIntegerMax; 
    for (NSArray *array in arrays) { 
    minCount = MIN(minCount, [array count]); 
    } 

    for (NSInteger i = 0; i < minCount; i++) { 
    for (NSArray *array in arrays) { 
     [result addObject:array[i]]; 
    } 
    } 

    return result; 
} 
+0

我喜欢闵检查,好主意。我完全忘了使用for循环而不是while循环哈哈。我在最后增加了索引... – 2014-09-23 15:05:08

1

无法评论,因为我没有50代表,所以必须作为答案!

您是否尝试过使用循环如

Dim i As Integer, j As Integer 
For i = 1 To 5 
For j = 1 To 3 

选择项目i从阵列j

Next j 
Next i 
+0

这里有更多的代表upvote! 我不熟悉Next,哪个对象包含该方法? – 2014-09-23 15:07:28

+1

您不需要“下一个”对象,这是循环的一部分。我不确定中间线,这就是为什么我没有将它包含在代码中,我没有使用数组,但大概你可以将它应用到你的方法? *还添加了我错过的昏暗指示* – DannyBland 2014-09-23 15:09:49

+0

您正在使用哪种语言? – 2014-09-23 15:12:07