2013-07-31 64 views
2

的我需要存儲串每個字符串我需要存儲布爾值我在TableView中的項目和名單..我會用一個NSDictionary但我怎麼能排序字符串列表按字母順序(使用選擇器)和排序在同一時間的布爾值?Objective-C的最佳數據結構排序字符串和布爾

我知道,像存在或sortUsingSelector方法UsingComparator,但在NSDictionary的我只能排序鍵的值所以我需要反向..

誰能幫助我,也許使用其他數據結構

+0

如果對鍵進行排序,則值會固有排序,因爲您使用鍵來訪問值。 – Wain

+0

爲什麼不製作字典數組?每個字典都包含一個字符串和一個布爾值。然後,您可以使用字符串對數組進行排序;) – HAS

+1

我找到了解決方法,有一些技巧,並且四處走動......非常感謝您的回答,您已經幫助我做到了這一點 – Shafa95

回答

1

我建議以下數據結構:

使用NSDictionaries的一個NSArray像這樣(做一個屬性):

self.array = @[@{@"String": @"Zusuuuuu", @"bool": @0}, // I am really not creative ;-) Just wanted an unsorted example 
       @{@"String": @"YourContent", @"bool": @0}, 
       @{@"String": @"YourOtherContent", @"bool": @1}]; 

您可以在排序是這樣的:

self.array = [self.array sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *aDictionary, NSDictionary *anotherDictionary) { 
    return [aDictionary[@"String"] compare:anotherDictionary[@"String"]]; 
}]; 

如果您想填充您的UITableView只需執行以下操作:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.array.count; //If you want them all in one section, easiest case 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // ... 
    // Do all the initialization of your cell 
    // ... 

    cell.yourLabel.text = self.array[indexPath.row][@"String"]; 
    cell.yourSwitch.on = ((NSNumber *)self.array[indexPath.row][@"bool"]).boolValue; 
    return cell; 
} 
+0

如何插入新的字典對象,像你一樣,在一個NSMutableArray? 我的意思是相當於addObject:對於一個普通數組 – Shafa95

+0

你不行。 「正常」數組是不可變的(一旦它初始化,你就不能改變它)。那是什麼時候做'alloc init'或'@ []'你不能再改變它的內容了,但是因爲我們使用了指針,我們可以很容易地創建一個新的數組,並讓我們的指針指向新創建的數組。 – HAS

+0

我不能一次填滿它。我需要在迭代中逐個填充。所以如果我使用NSMutableArray,我無法遵循你的方法? – Shafa95