2013-03-05 23 views
1

我有標題,作者數組。對象c中的SQL「group by」算法?

------------------------ 
title  author 
------------------------ 
A  a 
B  a 
C  b 
D  c 
E  c 
F  d 
G  d 
------------------------ 

如果我選擇*按作者

----------------- 
a  A, B 
b  C 
c  D, E 
d  F,G 

如何通過對象的C爲SQL的 「GROUP BY」 實現了組?

+0

我將不得不使字典像{ 'A':[ 'A', 'B'], 'B':[C],' c':['D','E'],'d':['F','G']} – 2013-03-05 15:12:16

+0

兩個標題可以相同嗎? – 2013-03-05 15:42:11

回答

2

創建一個類圖書

@interface Book : NSObject 
@property(strong)NSString *title; 
@property(strong)NSString *author; 
@end 

現在,作爲實施:

//創建對象,標題和作者

Book *b1=[Book new]; 
[b1 setTitle:@"A"];[b1 setAuthor:@"a"]; 

Book *b2=[Book new]; 
[b2 setTitle:@"B"];[b2 setAuthor:@"a"]; 

Book *b3=[Book new]; 
[b3 setTitle:@"C"];[b3 setAuthor:@"b"]; 

Book *b4=[Book new]; 
[b4 setTitle:@"D"];[b4 setAuthor:@"c"]; 

Book *b5=[Book new]; 
[b5 setTitle:@"E"];[b5 setAuthor:@"c"]; 

Book *b6=[Book new]; 
[b6 setTitle:@"F"];[b6 setAuthor:@"d"]; 

Book *b7=[Book new]; 
[b7 setTitle:@"G"];[b7 setAuthor:@"d"]; 


NSArray *[email protected][b1,b2,b3,b4,b5,b6,b7]; 

//your manipulation starts here 
NSMutableArray *groupByAuthors=[NSMutableArray new]; 
for (Book *book in books) { 
    if (![groupByAuthors containsObject:book.author]) { 
     [groupByAuthors addObject:book.author]; 
    } 
} 


for (NSString *author in groupByAuthors) { 
    NSMutableArray *titles=[NSMutableArray new]; 
    for (Book *book in books) { 
     if ([book.author isEqualToString:author]) { 
      [titles addObject:book.title]; 
     } 
    } 
    NSLog(@"Author: %@, Books: %@",author,titles); 
} 
+0

哇〜太棒了! Thansk。 – dobiho 2013-03-05 17:17:53

0

下面是一個簡單的算法做你問什麼,在數據集中只循環一次。

int main (int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

     NSArray *booksAndTitles = @[ 
      @[@"Book A1", @"Author A"], 
      @[@"Book B" , @"Author B"], 
      @[@"Book C" , @"Author C"], 
      @[@"Book A2", @"Author A"], 
      @[@"Book A3", @"Author A"], 
      @[@"Book C" , @"Author C"], 
      @[@"Book B" , @"Author B"] 
     ]; 

     NSMutableDictionary *titlesByAuthor = [NSMutableDictionary dictionary]; 

     for (NSArray *pair in booksAndTitles) { 

      NSString *title = pair[0]; 
      NSString *author = pair[1]; 

      NSMutableArray *titles = titlesByAuthor[author]; 
      if (titles == nil) { 
       titles = [NSMutableArray array]; 
       titlesByAuthor[author] = titles; 
      } 

      [titles addObject:title]; 
     } 

     NSLog(@"%@",titlesByAuthor); 
    } 
    return 0; 
} 

的輸出是下面的:

{ 
    "Author A" =  (
     "Book A1", 
     "Book A2", 
     "Book A3" 
    ); 
    "Author B" =  (
     "Book B", 
     "Book B" 
    ); 
    "Author C" =  (
     "Book C", 
     "Book C" 
    ); 
}