0

我有一个NSMutableOrderedSet包含NSDate对象。最初,这里是值:

2014-10-08 12:46:48 +0000
2014-10-08 12:46:42 +0000

用调用addObject2014-10-08 12:45:40 +0000,我得到以下输出:

2014-10-08 12:46:42 +0000
2014-10-08 12:46:48 +0000
2014-10-08 12:45:40 +0000

他们为什么不被订购?

4

3 回答 3

2

anNSMutablOrderedSet不像TreeSet保持排序的 Java。看addObject:文档:

如果给定对象还不是成员,则将给定对象附加到可变有序集的末尾。

您应该手动调用

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

或者

- (void)sortUsingComparator:(NSComparator)cmptr
于 2014-10-08T13:27:18.013 回答
1

我不知道为什么没有订购它们,但是您可以通过执行以下操作按日期对它们进行排序:

NSArray *mySortedArray =[myArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    NSComparisonResult result;

    NSDate *dateA = (NSDate*)obj1;
    NSDate *dateB = (NSDate*)obj2;

    result = [dateA compare:dateB];

    return result;
}];
于 2014-10-08T13:26:28.000 回答
0

它基本上就像 NSMutable 数组,但没有重复的对象。文档说 addObjec: 将其添加到末尾。您需要使用以下方法之一应用排序

– sortUsingDescriptors:

– 排序使用比较器:

– sortWithOptions:usingComparator:

– 排序范围:选项:使用比较器:

在语义上认为它与采用没有顺序的 NSMutableSet 相同,然后从中创建一个 NSMutableArray ,然后不喜欢数组的顺序。你需要告诉它如何排序。NSMutableOrderedSet 没有内置 DWIM(按照我的意思做)算法,你告诉它怎么做。

于 2014-10-08T13:29:56.470 回答