简体   繁体   English

来自NSArray的NSMutableArrays的NSMutableArray

[英]NSMutableArray of NSMutableArrays from NSArray

I have a number of objects in NSArray. 我在NSArray中有许多对象。 I want to reconstract NSMutableArray of NSMutableArrays with 6 elements in each out of NSArray. 我想用NSArray中的每6个元素重新构造NSMutableArrays的NSMutableArray。 How can I do it? 我该怎么做?

Edit My code: 编辑我的代码:

NSArray *newsList = [mynode6 findChildTags:@"td"]; //result of site parsing
NSMutableArray *someArray = [[NSMutableArray alloc] init];
int i=0;
for (HTMLNode *news in newsList) { 
    [someArray addObject:[newsList objectAtIndex:news];
    i++;
    if (i==5) {
        i=0;
        [self.valueArray addObject:someArray];
        [someArray removeAllObjects];
    }
}

valueArray is my main NSMutableArray. valueArray是我的主要NSMutableArray。 This code does not work, valueArray is empty. 此代码不起作用, valueArray为空。

It sounds like your approach is too obtuse for your average programmer...but alas... 听起来您的方法对普通程序员来说太过钝了...但是a ...

Do you really want to reuse someArray in the manner you have listed above? 您是否真的要以上面列出的方式重用someArray Adding someArray as an object of valueArray and then removing all objects later will just leave your valueArray full of empty arrays. 添加someArray为对象valueArray ,然后删除所有对象后只会留下您的valueArray全空的阵列。 Worse, you are adding the same array instance every single time... 更糟糕的是,您每次都添加相同的数组实例。

Maybe instead of [someArray removeAllObjects] you just make a new instance someArray = [[NSMutableArray alloc] init] 也许代替[someArray removeAllObjects]只是创建一个新实例someArray = [[NSMutableArray alloc] init]

Then after your for loop, make sure to add whatever is left over in someArray : 然后在for循环之后,确保添加someArraysomeArray

if(i) {
    [self.valueArray addObject:someArray];
}

Quick fix: 快速解决:

Allocate the array within your loop: 在循环中分配数组:

NSArray *newsList = [mynode6 findChildTags:@"td"]; //result of site parsing
NSMutableArray *someArray = [[NSMutableArray alloc] init];

int i=0;
for (HTMLNode *news in newsList) { 
    [someArray addObject:[newsList objectAtIndex:news];

    if (++i == 5) {
        i = 0;
        [self.valueArray addObject:someArray];
        [someArray release];
        someArray = [[NSMutableArray alloc] init];
    }
}

[someArray release];

I had a very similar issue with empty arrays after doing something similar. 在执行类似的操作后,我对空数组有一个非常相似的问题。 At the point you add the array in make it look like this.. 此时,您要添加数组,使其看起来像这样。

[self.valueArray addObject:[NSMutableArray arrayWithArray:someArray]];

This worked for me! 这对我有用! Its because you add a reference to someArray then remove all the objects hence its empty. 这是因为您添加了对someArray的引用,然后删除了所有对象,因此其为空。 By additing it arrayWithArray you make a copy of the data so removing the rows form one leaves them in the other. 通过将其与arrayWithArray相加,您可以复制数据,因此从一个表格中删除行将它们保留在另一个表格中。 :) :)

Plasma 等离子体

I couldn't understand this line.This line is not meaningful as objectAtIndex takes NSInteger as param..I presume ur trying to add HTMLNode element in that array 我听不懂这行。这行没有意义,因为objectAtIndex将NSInteger作为参数..我假设您试图在该数组中添加HTMLNode元素

[someArray addObject:[newsList objectAtIndex:news];

So,I think u need to replace the above line like this.. 因此,我认为您需要像这样替换上面的行。

[someArray addObject:news];

I have edited ur code snippet by making a few changes and i have plugged in my logic(Have created a new newsList array with some dummy objects to explain u the logic).. 我通过做一些更改来编辑了您的代码段,并插入了自己的逻辑(已创建了一个新的newsList数组,其中包含一些虚拟对象以解释您的逻辑)。

Here goes the edited code 编辑后的代码在这里

NSArray *newsList = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"A",@"B",@"C",@"D",@"E",@"F", nil];
    NSMutableArray *valueArray = [[NSMutableArray alloc] init];
    NSMutableArray *someArray = [[NSMutableArray alloc] init];

    int i=0;
    for (NSString *news in newsList) { 
    [someArray addObject:news];
     i++;
     if (i==6) {
         i=0;
         [valueArray addObject:someArray];
         NSLog(@"%@",someArray);
         [someArray release];
         someArray = [NSMutableArray new]; 
     }
     }

NSLog(@"%@",valueArray);

Here is the output from terminal.. 这是终端的输出。 在此处输入图片说明

Hope it helped!! 希望能有所帮助! Have a good reading! 祝您阅读愉快!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM