我遇到以下问题: 我有一个有序的NSArray对象,每个对象包含一个NSDate和一个NSNumber。 我想过滤数组,以便从具有相同值的连续对象中只有FIRST和LAST出现在filteredArray中。
示例:
13:01 7.0
13:02 7.1 (1st)
13:03 7.1 (2nd, to be filtered)
13:04 7.1 (3rd)
13:05 7.2
13:06 7.2
13:07 7.3 (1st)
13:08 7.3 (2nd, to be filtered)
13:09 7.3 (3rd, to be filtered)
13:10 7.3 (4th)
13:11 7.1
我认为使用NSPredicate无法做到这一点,那么实现这一目标的最有效方法是什么?
感谢您的帮助!
答案 0 :(得分:1)
由于它已经排序,如何简单地遍历数组,根据需要添加或替换对象?类似的东西:
NSMutableArray *myFilteredArray = [NSMutableArray arrayWithCapacity:myArray.count];
for (id object in myArray)
{
if (myFilteredArray.count>1)
{
id secondLastObject = [myFilteredArray objectAtIndex:myFilteredArray.count-2];
id lastObject = myFilterdArray.lastObject;
if ([[secondLastObject number] isEqualToNumber:[object number] && [[lastObject number] isEqualToNumber:[object number]])
{
[myFilteredArray removeLastObject];
}
}
[myFilteredArray addObject:object];
}
对我来说似乎应该非常有效,只有一个通过数组。
答案 1 :(得分:0)
我的做法是:
我不确定您是仅仅要求练习还是需要真实的代码,但如果您需要更多帮助,请告诉我。
答案 2 :(得分:0)
天真的方法:
NSMutableArray *arrayList = [NSMutableArray new];
// Split array
NSMutableArray *currentSubArray = nil;
float lastValue = 0.0f;
for (MyObject *obj in myArray) {
if ((obj.value != lastValue) || !currentSubArray) {
currentSubArray = [NSMutableArray new];
[arrayList addObject:currentSubArray];
lastValue = obj.value;
}
[currentSubArray addObject:obj];
}
// Join again with first/last objects only
NSMutableArray *myFilteredArray = [NSMutableArray new];
for (NSArray* subArray in arrayList) {
[myFilteredArray addObject:[subArray firstObject]];
if (subArray.count>1) {
[myFilteredArray addObject:[subArray lastObject]];
}
}