我有NSMutableArray
(ArrayOne)这样的结构..
({
"item_image_timeStamp" = "492364855.234597";
"item_image_url" = "sample url";
"item_image_vote" = 123;
}, {
"item_image_timeStamp" = "492364458.236597";
"item_image_url" = "sample url";
"item_image_vote" = 456;
}, {
"item_image_timeStamp" = "492364179.052397";
"item_image_url" = "sample url";
"item_image_vote" = 6184;
}, {
"item_image_timeStamp" = "492364789.004447";
"item_image_url" = "sample url";
"item_image_vote" = 64;
}, {
"item_image_timeStamp" = "492364356.002341";
"item_image_url" = "sample url";
"item_image_vote" = 3778;
})
ArrayOne中可包含的最大对象数为10.
然后,我有第二个NSMutableArray
(ArrayTwo)结构,就像ArrayOne
({
"item_image_timeStamp" = "492364855.234597";
"item_image_url" = "sample url";
"item_image_vote" = 123;
}, {
"item_image_timeStamp" = "492364458.236597";
"item_image_url" = "sample url";
"item_image_vote" = 456;
})
..除了ArrayTwo中可包含的最大对象数为3。
现在,我想做的是......
我希望我没有让我的问题太混乱。提前谢谢。
答案 0 :(得分:0)
添加,删除和测量长度是可变阵列上的所有方法,直接应用。问题的有趣部分是排序标准,NSSortDescriptor
很好地解决了这一问题。
NSArray
允许在sortedArrayUsingDescriptors
的组中应用这些(注意复数)。所以一个好方法是添加数组,根据您的标准排序并截断到最大长度。
// sort on vote, descending
NSSortDescriptor *voteDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"item_image_vote" ascending:NO];
// sort on date, descending
NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"item_image_timeStamp" ascending:NO];
NSMutableArray *bigArray = [ArrayOne mutableCopy]; // note: lowercase variable names is considered preferable style
[bigArray addObjectsFromArray:ArrayTwo];
[bigArray sortUsingDescriptors:@[voteDescriptor, dateDescriptor]];
// note: order matters. you want votes sorted first, ties broken with date
结果是bigArray
,现已排序,截断为最大尺寸。
NSArray *result = [bigArray subarrayWithRange:NSMakeRange(0, MIN(10, bigArray.count))];
答案 1 :(得分:0)
是......正是你所说的......最后一个数组意味着包含(a)First的原始前5名,(b)所有Second,以及(c)First中最年轻的遗留项目适合
只需逐步完成您的要求:
如果First&中的商品数量第二个组合是< = 10 just join。
"来自First"的原始前5名 - 按投票计数排序第一,您可以使用基于函数,块或描述符的排序。复制前5个(由于[1]必须至少有5个,因此这里不需要检查)项目是你的结果。
"所有Second" - 在结果中附加Second元素。您现在的结果中有6-8项。
从[2]中复制已排序的第一个项目6,然后按年龄对结果数组进行排序。根据需要将前2-4项添加到结果中。
以上所有内容均可使用标准NSArray
方法进行排序,复制和追加,
HTH