很久沒寫ios代碼。最近和朋友聊天時候有強迫症,想強烈把代碼給優化。
問題是這樣的:現在數據是日期數組,想過濾掉重複的日期,怎麼解決。
原始代碼
這裏想到更簡潔點。用NSSet來搞定。
- NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
- NSSet *set = [NSSet setWithArray:arr];
- NSLog(@"set%@\n", set);
- {(
- "12-11",
- "12-14",
- "12-13",
- "12-12"
- )}
朋友看了說不行,這樣打印的結果是無序的,用戶要看有序的結果。
查了一下NSSet的排序,發現有個
- @interface NSSet (NSSortDescriptorSorting)
- - (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors NS_AVAILABLE(10_6, 4_0); // returns a new array by sorting the objects of the receiver
- @end
傳遞的參數是NSSortDescriptor數組。
因此修改後代碼如下
- NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
- NSSet *set = [NSSet setWithArray:arr];
- NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
- NSArray *sortSetArray = [set sortedArrayUsingDescriptors:sortDesc];
- NSLog(@"set%@\nsort set%@", set, sortSetArray);
打印出來結果
- {(
- "12-11",
- "12-14",
- "12-13",
- "12-12"
- )}
- sort set(
- "12-11",
- "12-12",
- "12-13",
- "12-14"
- )
發現NSSortDescriptor是專門用來排序的描述符。可以用來排序NSSet,NSDictionary,NSArray。測試一下數組的使用。代碼如下
- NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
- NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
- NSArray *sort1Array = [arr sortedArrayUsingDescriptors:sortDesc];
- NSLog(@"sort1 array: %@\n",sort1Array);
打印出來
- sort1 array: (
- "12-11",
- "12-11",
- "12-11",
- "12-12",
- "12-13",
- "12-14"
- )
想起來一直用NSArray的排序代碼
- NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
- NSArray *sort2Array = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
- return [obj1 localizedCompare:obj2];
- }];
- NSLog(@"sort2 array %@", sort2Array);
以上只是示例,具體NSSortDescriptor和array的高級用法,大家可以查文檔,可以簡化代碼。