我有一系列词典,它看起来像是:
每个字典N:
name: some name
date: some date
size:some size
category: category // * * *
现在我在字典中有x
种类别,数组中有300个或更多字典。
我必须创建一个新数组,它的每个x
元素都包含一个字典,每个数组包含一个类别。这是某种平等分配。
所以创建的新数组中的第一个x是:
1. dic1 (categoryA)
2. dic2 (categoryb)
3. dic3 (categoryC)
x. dic4 (categoryD)
比下一个x元素:
x+1. dic1 (categoryA)
x+2. dic1 (categoryb)
x+3. dic1 (categoryC)
x+4. dic1 (categoryD)
直到我完成原始数组中的所有元素。(最后一个不必完全填充x类别,因为我不知道300±是否除以x。)
我正在以传统的方式循环播放数组,但我正在寻找一种智能的快速方法来使用NSSortDescriptor
或组合,以使其更好。
谢谢。
编辑:
我做到了。
loop over ([originalArray count] / x) times
{
loop over x categories
{
get from original an element with this category
save it to new array
remove it from original(or a copy created for this)
}
}
than just add what left in original, to the new .
答案 0 :(得分:0)
这是我对任何面对类似事物的人的回答,我认为这很简单,任何有关改变的建议都将受到赞赏:
-(void)distributeEqualiy:(NSMutableArray*)data
{
NSMutableArray *copy=[[NSMutableArray alloc] initWithArray:data];
NSMutableArray *new=[[NSMutableArray alloc] init];
int numCat=[[Globals sharedGlobals].categories count];
int loop=[copy count] / numCat ;
for(int k=0;k<loop;k++)
{
for(NSString *category in [Globals sharedGlobals].categories)
{
//get some data with the category
int toAdd=-1;
for(NSDictionary *dic in copy)
{
if([[dic objectForKey:@"category"] isEqualToString:category])
{
toAdd= [copy indexOfObject:dic];
break;
}
}
//add and remove only if found
if(toAdd>-1)
{
[new addObject:[copy objectAtIndex:toAdd] ];
[copy removeObject:[copy objectAtIndex:toAdd] ];
}
}
}
//results
for(NSDictionary *dic in new)
NSLog(@"%@",[dic objectForKey:@"category"]);
}
现在还剩下什么(你无法确定'loop'是否与数组中每个类别的数量的确切大小相同 - 例如,类别为数组的数组 - 将为您留下一些未排序的数据)根据其类别,取出并添加到“新”,或循环并再次排列。