2015-05-19 412 views
1

我有一個NSArray,它調用了tableView,我試圖將所有對象放入NSDictionary,但稍有不同。我的陣列是按照字母排序,它看起來如下:Objective-C從數組創建字典

enter image description here

我所試圖做的是把它們一個NSDictionary,我開始在裏面:

NSDictionary *contactDirectory = @{ 
       @"A" : @[], 
       @"B" : @[], 
       @"C" : @[], 
       @"D" : @[], 
       @"E" : @[], 
       @"F" : @[], 
       @"G" : @[], 
       @"H" : @[], 
       @"I" : @[], 
       @"J" : @[], 
       @"K" : @[], 
       @"L" : @[], 
       @"M" : @[], 
       @"N" : @[], 
       @"O" : @[], 
       @"P" : @[], 
       @"Q" : @[], 
       @"R" : @[], 
       @"S" : @[], 
       @"T" : @[], 
       @"U" : @[], 
       @"V" : @[], 
       @"W" : @[], 
       @"X" : @[], 
       @"Y" : @[], 
       @"Z" : @[] 
       }; 

因此,如果一個字母開頭與A,將其放在A列中。 Vendor_Name和Vendor都需要在那裏,但按照Vendor_Name排序。我的問題是什麼是下一個步驟來完成我想

+1

目錄或字典?不同的東西! – Monolo

+0

NSDictionary not Directory ...對不起 – user979331

回答

1
  1. 創建一個空的字典什麼:

    NSMutableDictionary *contactDirectory = [NSMutableDictionary new]; 
    
  2. 遍歷當前的陣列並插入對象所代表的大寫字母:

    for (NSInteger i = 0; i < tableData.count; i++) { 
        NSDictionary *tmp = tableData[i]; 
        NSString *firstLetter = [[tmp objectForKey:@"Vendor_Name"] substringToIndex:1]; 
        if (![contactDirectory objectForKey:firstLetter]) { 
         [contactDirectory setObject:[NSMutableArray new] forKey:firstLetter]; 
        } 
        [[contactDirectory objectForKey:firstLetter] addObject:tmp]; 
    } 
    
  3. 使用排序描述符爲每個子數組排序:

    NSMutableDictionary *contactDirectoryFinal = [NSMutableDictionary new]; 
    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"Vendor_Name" ascending:YES]; 
    for (NSString *key in contactDirectory.allKeys) { 
        [contactDirectoryFinal setObject:[[contactDirectory objectForKey:key] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]] forKey:key]; 
    } 
    

contactDirectoryFinal包含你所需要的。

+0

''[contactDirectory setObject:@ [] forKey:firstLetter]'可能需要'[contactDirectory setObject:[NSMutableArray new] forKey:firstLetter]'或者您的首選形式創建一個新的可變數組。否則'addObject:'會引發異常。 – Tommy

+0

@Tommy正確。修復。謝謝 – Asaf

+0

我得到3個警告與此代碼:'-containsKey:'未找到(返回類型默認爲'id') 'NSDictionary'可能不會響應'setObject:forKey:' 'NSDictionary'可能無法響應'setObject:forKey:' – user979331