将数组添加到另一个数组

时间:2014-02-12 21:56:04

标签: objective-c arrays variables nsmutablearray

如何将一个数组添加到另一个数组中?问题是我在不同的“插槽”中多次插入此数组,但是我插入的数组发生了变化,因此我得到一个数组,每个字段看起来都相同。

是否有选项可以获取数组1的内容并将整个内容放入数组2的一个字段中?

我认为问题在于数组看起来像这样:

NSMutableArray * bigArray = [

0:dynamicArray

1:dynamicArray

2:dynamicArray

3:dynamicArray

而不是:

NSMutableArray * bigArray = [

0:contentOfDynamicArray

1:contentOfDynamicArray

2:contentOfDynamicArray

3:contentOfDynamicArray

我的代码:

    twoDArray = [[NSMutableArray alloc] init];
    cat1 = [[NSMutableArray alloc] init];

    for (int k = 0; k < [noDuplicatesCat count]; k++) {
        NSLog(@"cat1: %@", cat1);
        [cat1 removeAllObjects];
        for (int i = 0; i < [parseJSONArray count]; i++) {
            NSMutableArray *temp;
            [temp removeAllObjects];
            temp = [[NSMutableArray alloc] init];
            temp = [parseJSONArray objectAtIndex:i];

            if ([[temp valueForKey:@"category"] isEqual:[noDuplicatesCat objectAtIndex:k]]){
                NSLog(@"equal");
                [cat1 addObject:temp];
            } else {
                NSLog(@"not equal");
            }
        }
        [twoDArray addObject:cat1];
        NSLog(@"2dArray: %@", twoDArray);
    }

4 个答案:

答案 0 :(得分:1)

- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray *)otherArray;

另外,你的代码有点疯狂。不要使用'i'和'k'作为变量名,实际上描述了你有哪种索引。这个:

        NSMutableArray *temp;
        [temp removeAllObjects];
        temp = [[NSMutableArray alloc] init];
        temp = [parseJSONArray objectAtIndex:i];

没有任何意义。第二行从未初始化的变量中删除所有对象,该变量不执行任何操作。第三个创建它,这很好,但第四个会覆盖你刚刚创建的东西。

答案 1 :(得分:0)

谢谢,我刚刚找到了一个可能的解决方案:[bigarray addObject:[NSMutableArray arrayWithArray:smallaray]];

答案 2 :(得分:0)

根据parseJSONArray的[唯一]类别,您似乎试图按记录的category字段拆分大记录数组noDuplicatesCat。生成的twoDArraynoDuplicatesCat具有相同的顺序。

以下是缩减版:

NSMutableArray *twoDArray = [[NSMutableArray alloc] init];

for (id category in noDuplicatesCat) {
    NSMutableArray *cat1 = [[NSMutableArray alloc] init];
    [twoDArray addObject:cat1];

    for (id item in parseJSONArray)
        if ([[item valueForKey:@"category"] isEqual:category])
            [cat1 addObject:item];
}

答案 3 :(得分:0)

你的代码有很多问题,但我不想苛刻你。 感谢你跳进来并试图学习一些东西,也是为了 把你的代码放在那里。我要尝试重写你的内容 完成基于我非常对你正在尝试的内容的有限理解 要做。

首先,一些线索:

 temp = [parseJSONArray objectAtIndex:i]
 // and
 if ([[temp valueForKey:@"category"] ...

让我相信parseJSONArrayNSDictionary的数组。 您可能应该使用-[NSDictionary objectForKey:],例如

NSDictionary *temp = [parseJSONArray objectAtIndex:i]
 // and
 if ([[temp objectForKey:@"category"] ...

我还打赌[temp objectForKey:@"category"]会返回NSString

如果这些假设是正确的,这看起来就像你想要做的那样:

// NSArray *noDuplicatesCat = <array of strings>
NSMutableArray *arrayOfArrayOfJSONDicts = [NSMutableArray array];

for (NSString *cat in noDuplicatesCat) {
    NSMutableArray *gather = [NSMutableArray array];  
    for (NSDictionary *jsonDict in parseJSONArray) {
        if ([jsonDict objectForKey:@"category"] isEqualToString:cat]) {
            [gather addObject:jsonDict];
        }
    }
    [arrayOfArrayOfJSONDicts addObject:gather]
}

我不确定服务的用途是什么。如果你告诉我们,它可能是有用的或有趣的, 在更高的层次上,你想要实现的目标。以某种方式防止重复?你可以编辑你的 问题是添加一个附录。

无论如何,鉴于我现在所看到的,你真的需要打书以避免 现在把自己编程成一个完整的混乱。我建议玩很多东西 NSArrayNSDictionary,直到你真正明白自己在做什么为止。祝你好运!