排序和合并&在Objective-C中再次排序两个具有不同键值对象的数组

时间:2012-11-16 05:55:36

标签: objective-c ios sorting merge nsarray

我很困惑其中一个排序&合并问题。让我描述我的问题如下。

步骤1.我有一个数组。我只是编写一个数组的控制台日志来理解它的结构。

(
    {
        id_ = 1,
        name_ = "some xyz name",
        date_ = "2012/01/24 05:25:30 AM"
    },
    {
        id_ = 2,
        name_ = "some ABC name",
        date_ = "2012/01/25 06:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some PQR name",
        date_ = "2012/01/22 04:30:30 AM"
    },
)

步骤2.因此,为了对上面的数组进行排序,我已经放置了以下代码。

NSArray *myArray = // someHow I get those values listed above.
NSSortDescriptor *sortD1=[[NSSortDescriptor alloc] initWithKey:@"date_" ascending:YES];
myArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortD1]];

步骤3.现在我有完整的排序数组。

步骤4.我有另一种类似的阵列。

(
    {
        obj_id_ = 11,
        obj_date_ = "2012/01/24 05:25:30 AM"
    },
    {
        obj_id_ = 21,
        obj_date_ = "2012/01/23 05:25:30 AM"
    },
    {
        obj_id_ = 17,
        obj_date_ = "2012/01/21 05:25:30 AM"
    },
)

步骤5.因此,为了对上面的数组进行排序,我已经放置了以下代码。

NSArray *myArray2 = // someHow I get those values listed above.
NSSortDescriptor *sortD2=[[NSSortDescriptor alloc] initWithKey:@"obj_date_" ascending:YES];
myArray2 = [myArray2 sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortD2]];

步骤6.现在我必须合并两个数组,但它应该根据日期进行排序。

(
    {
        obj_id_ = 17,
        obj_date_ = "2012/01/21 05:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some PQR name",
        date_ = "2012/01/22 04:30:30 AM"
    },
    {
        obj_id_ = 21,
        obj_date_ = "2012/01/23 05:25:30 AM"
    },
    {
        id_ = 1,
        name_ = "some xyz name",
        date_ = "2012/01/24 05:25:30 AM"
    },
    {
        obj_id_ = 11,
        obj_date_ = "2012/01/24 05:25:30 AM"
    },
    {
        id_ = 2,
        name_ = "some ABC name",
        date_ = "2012/01/25 06:25:30 AM"
    }
)

预期产量,我希望如上所述。只是我不知道合并具有不同键值的两个不同阵列的逻辑。我正在尝试为此构建逻辑但它返回一个空数组&这是不对的。所以,我不是在这里发布的。

注意:如果此问题重复,在进行投票之前,请通过评论通知我。我将删除它&将感谢需要的链接&支持。 :)

1 个答案:

答案 0 :(得分:3)

首先,我将定义一个函数,该函数根据传递的对象返回日期:

- (NSDate *)dateForObject:(id obj) {
    if ([obj class] == [MyClass1 class]) {
        return ((MyClass1) obj).date_;
    }
    else {
        return ((MyClass2) obj).obj_date_;
    } 
}

然后我会使用块排序:

NSArray *sortedArray;
sortedArray = [mergedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *aDate = [self dateForObject:a];
    NSDate *bDate = [self dateForObject:b];        
    return [aDate compare:bDate];
}];