安排一系列字典以实现平等分配

时间:2014-09-28 13:17:37

标签: objective-c

我有一系列词典,它看起来像是:

每个字典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 .

1 个答案:

答案 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'是否与数组中每个类别的数量的确切大小相同 - 例如,类别为数组的数组 - 将为您留下一些未排序的数据)根据其类别,取出并添加到“新”,或循环并再次排列。