【问题标题】:Sorting NSMutableArray objects according to the epoch time根据纪元时间对 NSMutableArray 对象进行排序
【发布时间】:2012-03-02 07:08:14
【问题描述】:
我有包含 NSObjects 的 NSMutableArray。每个 NSObject 都包含一个 NSString 作为具有纪元时间的属性。现在我想根据纪元时间对数组对象进行排序...请帮助我实现这一点...提前致谢
【问题讨论】:
标签:
iphone
objective-c
ios
【解决方案1】:
对数组进行排序很容易。您所需要的只是一段可以比较数组中的两个对象的代码。您可以以方法、函数或比较器块的形式提供该代码。因此,假设您选择了比较器:
[myArray sortUsingComparator:^(NSString *string1, NSString *string2) {
// your code goes here
}];
用您的代码替换注释行以从每个字符串中获取时间并进行比较。这可能是您真正要询问的部分。我无法为您提供该代码,因为我不确切知道您的字符串是什么样的。如果字符串中唯一的内容是自 epoch 以来的秒数,那么它就像调用 NSString 的 -longLongValue 方法一样简单:
[myArray sortUsingComparator:^(NSString *string1, NSString *string2) {
long long time1 = [string1 longLongValue];
long long time2 = [string2 longLongValue];
NSComparisonResult result = NSOrderedDescending;
if (time1 < time2)
result = NSOrderedAscending;
else if (time1 == time2)
result = NSOrderedSame;
return result;
}];
如果您的字符串包含其他信息,您可能需要使用一些 NSString 方法或 NSScanner 来提取您想要的信息。为了让比较器块保持简单,您可能希望使用一个类别来添加一个-epochTimeValue 方法,该方法将时间提取到 NSString。这样你就可以使用类似于上面的代码了。
【解决方案2】:
您好,请按这种方式排序。
NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"YOURSTRINGKEY" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
NSArray *sortedArray = [YOUR_ARRAY sortedArrayUsingDescriptors:sortDescriptors];
这对你有用