NSMutableOrderedSet addObject未排序

时间:2014-10-08 13:21:30

标签: objective-c containers nsmutableorderedset

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

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

使用addObject致电2014-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

为什么他们没有订购?

3 个答案:

答案 0 :(得分:2)

NSMutablOrderedSet不像Java TreeSet那样保持排序。查看addObject:文档:

  

将一个给定对象追加到可变有序集的末尾(如果它还不是成员)。

你应该手动调用

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

- (void)sortUsingComparator:(NSComparator)cmptr

答案 1 :(得分: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;
}];

答案 2 :(得分:0)

它基本上类似于NSMutable数组,但没有重复的对象。 文档说addObjec:将它添加到最后。 您需要使用以下方法之一来应用排序

- sortUsingDescriptors:

- sortUsingComparator:

- sortWithOptions:usingComparator:

- sortRange:options:usingComparator:

在语义上考虑它与获取没有顺序的NSMutableSet相同,从中创建NSMutableArray然后不喜欢数组的顺序。你需要告诉它如何排序。 NSMutableOrderedSet没有一个DWIM(做我的意思)算法,你告诉它如何。