2014-09-28 79 views
0

我有字典的陣列,它看起來像:排列字典的陣列,用於均勻分佈

每個字典N:

name: some name 
date: some date 
size:some size 
category: category // * * * 

現在我有x類型的類別的辭典內,和300或陣列中的更多字典。

我必須創建一個新的數組,它的每個x元素將包含一個來自每個類別的1個類別的字典。這是某種平均分配

創建的新陣列中的那麼第一個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。)

我以傳統方式在數組上循環,但我正在尋找一種智能快速方法來做t與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

我想出了這個:http://pastebin.com/hB6xbFav我無法擺脫'for循環',但因爲我不知道你以前太「重」代碼看起來像,我不能說如果它看起來更好。你也可能受到它的啓發。我沒有把它作爲答案發布,因爲我覺得它可以更好,但它可能會提供一些提示/提示。 – Larme 2014-09-28 14:25:49

+0

非常感謝您的回答。看起來我的代碼更短,看看我在編輯中做了什麼,讓我知道你對它的看法。非常感謝。 – Curnelious 2014-09-28 15:40:42

回答

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'的大小與數組中的每個類別的數量完全相同(例如,完全滿足categoryA的數組),這會給你帶來一些未分類的數據),你可以將其添加到'new'中,或者循環遍歷它並根據其類別再次安排。