iOS 中NSArray NSSet轉換 過濾重複與排序操作

很久沒寫ios代碼。最近和朋友聊天時候有強迫症,想強烈把代碼給優化。

問題是這樣的:現在數據是日期數組,想過濾掉重複的日期,怎麼解決。

原始代碼


這裏想到更簡潔點。用NSSet來搞定。

  1. NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  
  2. NSSet *set = [NSSet setWithArray:arr];  
  3. NSLog(@"set%@\n", set);  
打印出來的結果

  1. {(  
  2.     "12-11",  
  3.     "12-14",  
  4.     "12-13",  
  5.     "12-12"  
  6. )}  

朋友看了說不行,這樣打印的結果是無序的,用戶要看有序的結果。

查了一下NSSet的排序,發現有個

  1. @interface NSSet (NSSortDescriptorSorting)  
  2.   
  3. - (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors NS_AVAILABLE(10_64_0);    // returns a new array by sorting the objects of the receiver  
  4.   
  5. @end  

傳遞的參數是NSSortDescriptor數組。

因此修改後代碼如下

  1. NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  
  2. NSSet *set = [NSSet setWithArray:arr];  
  3. NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];  
  4. NSArray *sortSetArray = [set sortedArrayUsingDescriptors:sortDesc];  
  5. NSLog(@"set%@\nsort set%@", set, sortSetArray);  

打印出來結果

  1. {(  
  2.     "12-11",  
  3.     "12-14",  
  4.     "12-13",  
  5.     "12-12"  
  6. )}  
  7.  sort set(  
  8.     "12-11",  
  9.     "12-12",  
  10.     "12-13",  
  11.     "12-14"  
  12. )  

發現NSSortDescriptor是專門用來排序的描述符。可以用來排序NSSet,NSDictionary,NSArray。測試一下數組的使用。代碼如下

  1. NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  
  2. NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];  
  3. NSArray *sort1Array = [arr sortedArrayUsingDescriptors:sortDesc];  
  4. NSLog(@"sort1 array: %@\n",sort1Array);  

打印出來

  1. sort1 array: (  
  2.     "12-11",  
  3.     "12-11",  
  4.     "12-11",  
  5.     "12-12",  
  6.     "12-13",  
  7.     "12-14"  
  8. )  

想起來一直用NSArray的排序代碼

  1. NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  
  2. NSArray *sort2Array = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1id obj2) {  
  3.         return [obj1 localizedCompare:obj2];  
  4.     }];  
  5. NSLog(@"sort2 array %@", sort2Array);  


以上只是示例,具體NSSortDescriptor和array的高級用法,大家可以查文檔,可以簡化代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章