【问题标题】:Sort and merge & sort again two arrays having different key-valued objects in Objective-C在Objective-C中对两个具有不同键值对象的数组进行排序和合并再排序
【发布时间】:2012-11-16 05:55:36
【问题描述】:

我对排序和合并问题之一感到困惑。让我将我的问题描述如下。

第 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"
    }
)

预期的输出,我想要的如上。只是我不知道合并两个具有不同键值的不同数组的逻辑。我正在尝试为此建立一个逻辑,但它返回一个空数组并且它是错误的。所以,我就不在这里发了。

注意:如果这个问题是重复的,在否决它之前,请通过 cmets 通知我。我将删除它并感谢必要的链接和支持。 :)

【问题讨论】:

  • 你的数组中的对象是 NSDictionary 类型的吗?
  • @NathanVillaescusa - 不,先生。这些是来自核心数据的对象。如果这些是字典,我只需添加“newdate”键即可在所有字典中进行排序。在核心数据对象中,我认为我无法添加任何其他键。

标签: objective-c ios sorting merge nsarray


【解决方案1】:

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

- (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];
}];

【讨论】:

  • 好吧!这真是太棒了!感谢您的快速帮助。我非常感谢。 (弓)(弓)+1 并接受。 :)
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2018-07-16
相关资源
最近更新 更多