1. 程式人生 > >NSSet、NSArray的日期排序

NSSet、NSArray的日期排序

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

問題是這樣的:現在資料是日期陣列,想過濾掉重複的日期,怎麼解決。

原始程式碼

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

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];  
NSSet *set = [NSSet setWithArray:arr];  
NSLog(@"set%@\n", set);  

打印出來的結果

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

{(  
    "12-11",  
    "12-14",  
    "12-13",  
    "12-12"  
)}  

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

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

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

@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陣列。

因此修改後程式碼如下

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

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);  

打印出來結果

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

{(  
    "12-11",  
    "12-14",  
    "12-13",  
    "12-12"  
)}  
 sort set(  
    "12-11",  
    "12-12",  
    "12-13",  
    "12-14"  
)  

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

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

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);  

打印出來

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

sort1 array: (  
    "12-11",  
    "12-11",  
    "12-11",  
    "12-12",  
    "12-13",  
    "12-14"  
)  

想起來一直用NSArray的排序程式碼

[objc] view plain copy
在CODE上檢視程式碼片派生到我的程式碼片

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的高階用法,大家可以查文件,可以簡化程式碼。

相關推薦

NSSetNSArray日期排序

很久沒寫iOS程式碼。最近和朋友聊天時候有強迫症,想強烈把程式碼給優化。 問題是這樣的:現在資料是日期陣列,想過濾掉重複的日期,怎麼解決。 原始程式碼 這裡想到更簡潔點。用NSSet來搞定。 [objc] view plain copy 在CODE上檢

集合:NSArrayNSMutableArrayNSDictionaryNSMutableDictionaryNSSetNSMutableSet使用

/*本文介紹了:NSArray(有序的集合,儲存的元素在一個整塊的記憶體中並按序排列)、 NSMutableArray、 NSDictionary(鍵值對映)、 NSMutableDictionary、 NSSet(無序的集

sort-list——鏈表快慢指針找中間歸並排序

val 排序。 rtl != spa 判斷 nbsp node ace Sort a linked list in O(n log n) time using constant space complexity. 鏈表,快慢指針找中點,歸並排序。 註意判斷條件fast-

David MacKay:用信息論解釋 '快速排序''堆排序' 本質與差異

新的 read aso 這一 recursion 12個 new div 差異 這篇文章是David MacKay利用信息論,來對快排、堆排的本質差異導致的性能差異進行的比較。 信息論是非常強大的,它並不只是一個用來分析理論最優決策的工具。 從信息論的角度來分析算法效率是一

Java 的冒泡排序直接選擇排序和反轉排序方法

int sys nbsp arr i++ tostring ava ++ arrays 冒泡排序: System.out.println(Arrays.toString(arr)); int temp = -1; for(int i=0;i<arr.length;i+

mui選擇時間選擇日期

date btn tlist -1 back tap 技術分享 ast reg 完整代碼: <header class="mui-bar mui-bar-nav"> <a class="mui-action-back mui-icon m

【算法拾遺(java描寫敘述)】--- 插入排序(直接插入排序希爾排序

ecan itblog insert med image java程序 can rip title 插入排序基本思想 每次將一個待排序的記錄按其keyword大小插入到前面已經拍好序的子文件的適當位置,直到全部記錄插入完畢為止。 直接插入

Python中列表(list)字典(dict)排序的程序

self. 能夠 網站 軟件 too 字段 tool 生成 ted Python3 中的排序,在 Sorting HOW TO 中已經講得很清楚了。來個實際的例子,對下面的這個 list 依據創建時間排序: pages = [{‘title‘: ‘十年學會程序設計‘, ‘

Android UsageStats:應用根據啟動次數啟動時間應用名稱排序

public each eno you when listen iss 技術 internal Android 7.1.1 developers/samples/android/system/AppUsageStatistics/Application/src/main/j

Java8的日期排序

vb6 href doc cor put userinfo uft vga lan k倬航赫60186w巫4shttp://shufang.docin.com/ptyc1214 1XYsa頰40儼c吃http://shequ.docin.com/ecbx2797 3f傅

go語言的排序結構體排序

sea 封裝 class 讓其 其他 zhang import 過去 blue 原文:https://studygolang.com/articles/1598 晚上準備動手寫點 go 的程序的時候,想起 go 如何排序的問題。排序 sort 是個基本的操作,當然搜索

ORACLE---Unit02: Oracle字符串操作 Oracle數值操作 Oracle日期操作 空值操作

其它 sca 需要 一個 rtrim unit con ava 空字符 ---DQL:數據查詢語句 ---SELECT語句中必須包含至少兩個字句,分別是SELECT字句與FROM字句。 ---SELECT子句用來指定要查詢的字段, ---FROM子句用來定制數據來源的表。

在路上---學習篇(一)Python 數據結構和算法 (4) --希爾排序歸並排序

改進 randint 循環 打印 中一 隨機 關鍵詞 shel 條件 獨白:   希爾排序是經過優化的插入排序算法,之前所學的排序在空間上都是使用列表本身。而歸並排序是利用增加新的空間,來換取時間復雜度的減少。這倆者理念完全不一樣,註定造成的所消耗的時間不同以及空間上的不同

js獲取某周某月下月某季度的開始日期結束日期及判斷日期第幾周

weekend return n) nth 結束時間 value rst 獲得 set //格式化日期:yyyy-MM-dd   function formatDate(date) {      var myyear = date.getFullYear();     v

SQL 操作結果集 -並集差集交集結果集排序

nbsp 分享 字段名 運算 語法 http 測試數據 結構 put 操作結果集   為了配合測試,特地建了兩個表,並且添加了一些測試數據,其中重復記錄為東吳的人物。   表:Person_1魏國人物       表:Person_2蜀國人物      A、Union形成並

java實現排序算法:快排冒泡排序選擇排序插入排序歸並排序

結果 快速 post ont pla emp string () tro 一、概述:本文主要介紹常見的幾種排序算法的原理以及java實現,包括:冒泡排序、選擇排序、插入排序、快速排序、歸並排序等。 二、冒泡排序: (1)原理:   1、從第一個數據開始,與第二個數據相比較,

Java排序算法分析與實現:快排冒泡排序選擇排序插入排序歸並排序(二)

第一個元素 spa insert 循環 冒泡排序 author 高級算法 ins -s 一、概述:   上篇博客介紹了常見簡單算法:冒泡排序、選擇排序和插入排序。本文介紹高級排序算法:快速排序和歸並排序。在開始介紹算法之前,首先介紹高級算法所需要的基礎知識:劃分、遞歸,並順

【自考】排序算法-插入交換選擇歸並排序

排序算法 ans ica args sub dex 劃分 data 下標 碎碎念: ? ? ? ? ?記得當初第一年的時候、接觸算法、有那麽兩個視頻、跳舞的、講

JS獲取當前日期比較日期大小

獲取 mon 當前時間 function format 日期 col log 格式 //獲取當前時間,格式YYYY-MM-DD function getNowFormatDate() { var date = new Date(); var seperat

JVM學習--(二)內存模型可見性指令重排序

兩個 tor 可能 程序 處理器 通過 順序執行 一點 資料 我們將根據JVM的內存模型探索java當中變量的可見性以及不同的java指令在並發時可能發生的指令重排序的情況。 內存模型 首先我們思考一下一個java線程要向另外一個線程進行通信,應該怎麽做,我們再把需