首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组问题(添加和复制)

数组问题(添加和复制)
EN

Stack Overflow用户
提问于 2011-04-07 16:10:02
回答 3查看 112关注 0票数 0

我有个问题。我尝试将一个数组(名称: mps)中的项排序到另一个数组(名称: totalArray)中,但每个项都应该在一个新的数组中。简而言之: mps中的项应该移动到一个新的数组中,但每个项都应该在一个新的数组中,所以totalArray是一个数组的数组。在此之后,应该将totalArray复制回mps。

为了清楚起见,下面是代码:

代码语言:javascript
复制
NSMutableString *oud = [[NSMutableString alloc] init];
NSMutableString *nieuw = [[NSMutableString alloc] init];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray removeAllObjects];
NSMutableArray *totalArray = [[NSMutableArray alloc] init];
[totalArray removeAllObjects];
tempArray = [[NSMutableArray alloc] init];
[tempArray removeAllObjects];
for (int j = 0; j < [mps count]; j++)
{
    nieuw = [[mps objectAtIndex:j] valueForKey:@"ConfigurationAlias"];
    if (j != 0)
    {
        if ([oud rangeOfString:nieuw].location == NSNotFound) 
        { 
            NSLog(@"ADDED!");
            [totalArray addObjectsFromArray:tempArray];
            [oud setString:nieuw];
            [tempArray removeAllObjects];
            [tempArray addObject:[mps objectAtIndex:j]];
        }
        else
        {
            [tempArray addObject:[mps objectAtIndex:j]];
        }
    }
    else {
        [oud setString:nieuw];
        [tempArray addObject:[mps objectAtIndex:j]];
    }
}

//En de array weer laden in de tabel
//NSLog(@"%@", totalArray);
NSLog(@"%i", [mps count]);
[mps removeAllObjects];
NSLog(@"REMOVED!!!");
NSLog(@"%i", [mps count]);
[mps addObjectsFromArray:totalArray];
NSLog(@"Added totalArray: %i", [totalArray count]);
NSLog(@"%i", [mps count]);
[tempArray release];
[totalArray release];
[tabelView reloadData];

}

现在,我的问题来了:

日志给出线路2011-04-07 10:02:46.368 Fleet Manager[901:40b] ADDED! 11次,然后发送16 (mps计数,这是正确的),然后是REMOVED!线路,然后是0 (mps计数,也是正确的),最后是线路: Added totalArray: 15。这不可能是正确的,它加了11次,但是它数了15次?

这对我来说是个问题,首先是因为它是完全不正确的,但是表视图也搞砸了,因为分区数量也不正确(15个分区)。有人知道这是怎么回事吗?

编辑: mps中的所有对象都是字典,并且都有一个键ConfigurationAlias的值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-07 16:36:07

首先,我建议使用调试模式而不是一堆NSLog函数来跟踪对象和变量中实际发生的事情。尝试使用断点。为[totalArray addObjectsFromArray:tempArray];行设置1,这样每次到达此行代码时,执行都会停止,并允许您查看周围,检查totalArraytempArray对象中不同字段的状态。

关于你的问题...由于您使用的是addObjectsFromArray:,这意味着传递的数组可能传递的不是一个对象,而是多个对象(因此方法名中的复数形式)。我猜"11次“中的一个添加了不止一个元素--这应该解释了实际的计数超过了你调用这个方法的次数。再次,请检查tempArray内容。

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2011-04-07 16:38:24

如果你想得到一个数组的数组,你需要在循环中分配临时数组。看起来你在清理数组的时候也做得过火了。

似乎您试图将mps中的值添加到totalArray中,而不考虑条件,所以只在一个地方(条件之外)这样做是有意义的。

此外,如果您不改变数组(例如tempArray),则可以改用NSArray,它应该更小、更快。

最后,您应该能够将新数组分配给mps,而不是执行昂贵的数组复制。不过,我不确定是否以某种方式引用了表委托。

我会尝试这样的方法:

代码语言:javascript
复制
NSMutableString *oud = [[NSMutableString alloc] init];
NSMutableString *nieuw = [[NSMutableString alloc] init];

NSMutableArray *tempArray;

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

for (int j = 0; j < [mps count]; j++)
{
    tempArray = [[NSMutableArray alloc] init];
    [totalArray addObject:tempArray];
    [tempArray release];

    nieuw = [[mps objectAtIndex:j] valueForKey:@"ConfigurationAlias"];

    if (j != 0)
    {
        if ([oud rangeOfString:nieuw].location == NSNotFound) 
        { 
            NSLog(@"ADDED!");
            [oud setString:nieuw];
        }
    }
    else {
        [oud setString:nieuw];
    }
}

NSLog(@"%i", [mps count]);
[mps removeAllObjects];

NSLog(@"REMOVED!!!");
NSLog(@"%i", [mps count]);

[mps addObjectsFromArray:totalArray];
NSLog(@"Added totalArray: %i", [totalArray count]);
NSLog(@"%i", [mps count]);

[totalArray release];
[tabelView reloadData];
}
票数 1
EN

Stack Overflow用户

发布于 2011-04-07 16:18:38

你应该

对tempArray

  • create中的基数组进行排序一个空的resultArray

  • iterate到tempArray,并为每个项创建一个包含第一个位置的项的itemArray,并将此数组添加到

中忘记释放所有分配的临时数据

请查看以下内容,以便轻松排序:Sorting arrays via Apple

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5577889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档