Demo IOS中將物件陣列按照時間戳排序

2021-07-25 13:43:54 字數 3188 閱讀 2325

將物件按照時間戳排序,這裡典型的乙個例子是登入賬戶的排序:本地客戶端可能儲存了多個賬戶資訊,在登入視窗使用者可以選擇已經登陸過的賬戶直接登入,現在的需求是要時刻讓最近登陸過的賬戶排在前面,對於每個賬戶,每次登陸時都記錄下當前登陸的時間,時間是乙個時間戳(從2023年到現在的秒數)。我們要做的是將時間戳排序,然後按照時間戳的順序將所有賬戶排序。當然這也適用於其他關於時間排序的問題。

// 時間戳陣列(存放時間nsdate物件用於排序)

nsmutablearray *timearr = [[nsmutablearray alloc]init];

// 時間戳-物件字典,將物件和其對應的時間戳字串存入字典(雜湊表)

nsmutabledictionary *datekeyarr = [[nsmutabledictionary alloc]init];

// 時間戳取出,並格式化處理

for(account *acc in _accountarray)

// 3.將時間nsdate陣列排序

nsarray *ordereddatearray = [timearr sortedarrayusingcomparator:^nscomparisonresult(nsdate *date1, nsdate *date2) ];

// 根據排序好的時間陣列對號入座將物件按時間排序

// 臨時陣列,儲存排序後的物件陣列

nsmutablearray *sortedaccounts = [[nsmutablearray alloc]init];

nsdate *datekey = [[nsdate alloc]init];

for (int i = 0; i.count; i++)

// sortedaccounts就是我們要的結果了

這裡製作乙個只包含使用者名稱和時間戳的假賬戶資料,排序後按照順序顯示在乙個textview中:

@property (nonatomic, copy) nsstring *name; // 姓名

@property (nonatomic, assign) long

long

int logintime; // 上次登入時間戳(距離2023年的秒數)

+ (account*)newaccountwithname:(nsstring *)name andtime:(long

long

int)logintime;

@end

//

// account.m

// timesortdemo

//// created by xinhou jiang on 22/12/16.

//#import "account.h"

@implementation

account

+ (account *)newaccountwithname:(nsstring *)name andtime:(long

long)logintime

@end

//

// viewcontroller.m

// timesortdemo

//// created by xinhou jiang on 22/12/16.

//#import "viewcontroller.h"

#import "account.h"

@inte***ce

viewcontroller ()

@property(nonatomic, strong) iboutlet

uitextview *text;

@property (nonatomic, strong) nsmutablearray

*accountarray; // 賬戶陣列

@end

@implementation

viewcontroller

- (void)viewdidload

- (void) request

// 將陣列按照時間戳排序

- (ibaction)sort:(id)sender

// 3.將時間nsdate陣列排序

nsarray *ordereddatearray = [timearr sortedarrayusingcomparator:^nscomparisonresult(nsdate *date1, nsdate *date2) ];

// 4.根據排序好的時間陣列對號入座將物件按時間排序

// 臨時陣列,儲存排序後的物件陣列

nsmutablearray *sortedaccounts = [[nsmutablearray alloc]init];

nsdate *datekey = [[nsdate alloc]init];

for (int i = 0; i.count; i++)

// 5.更新排序後的物件陣列[arc中不需要手動釋放排序前的陣列]

_accountarray = sortedaccounts;

// 顯示排序後的資料

[self showui];

}// 顯示資料到頁面

LinkedList中將物件按照某一屬性排序

例如,鍊錶 treelist 宣告如下 linkedlisttreelist new linkedlist 其中 treenode 是自己定義的乙個類,類中有乙個 int 型別的 value 屬性,若要以 treenode 中的 value 屬性排序,可以如下實現 1 新增乙個類,實現 compar...

JS中將物件轉化為陣列

這個對於大佬來說應該是個很基礎的問題,但是今天我要用到這個的時候卻一下沒想起來該怎麼做,所以打算寫下來加深下影響。舉個例子,如何把乙個物件轉化為 我們都知道,js中物件有兩種取值方式,通過在.後面直接加屬性名取值,這也是我們最常使用的一種方式,例如 let obj console.log obj.n...

JS中將物件轉化為陣列

通過在.後面直接加屬性名取值,這也是我們最常使用的一種方式 let obj console.log obj.name wan let obj console.log obj name wan 中括號獲取的時候,屬性名稱要麼使用變數,要麼應該用字串 物件 let obj 如果目標陣列只是為了得到物件的...