从NSArray获取特定范围

时间:2012-11-18 19:54:58

标签: iphone objective-c ios nsarray date-range

所以,我认为这并不容易......这里有:我有两个NSArray,每个包含一些自定义对象(符合KVC ......也许这会有所帮助)。对象在第一个数组中有两个属性(让我们称之为array1)这个对象是NSNumbers,在第二个数组中,一个对象是NSNumber,另一个是NSDate ......这是由两部分组成的问题:

1)如何从阵列1获取NSArray,其中所有对象都具有特定范围内的NSNumber

假设数组是[(1,1),(2,4),(2,12),(3,14)],我需要一个第二个值介于3和13之间的数组,(仅)在这种情况下对象2和3)..是的,数组在第二个变量上排序......

2)在第二个数组中,我需要在一个区间内具有日期的对象,但是我需要以较小的间隔对这个区间进行子分割,并且返回的数组将具有这些新对象,这些对象具有来自的数字对象的总和。第一个间隔......一个例子是为了以防我不清楚......

最初的数组是[(2,1月12日),(5月1日13日),(20,3月15日),(10月3日20日),(26日,4月28日),(20日,5月6日), (30日,7月4日)]; 我需要间隔2月1日 - 5月30日,分成几个月,结果应该是 [(0,2月),(30,3月(初始阵列20 + 10)),(26,4月),(30,可能)];

这个初始的日期 - 数字数组不会改变......并且子区间分割时间框架总是:从间隔的开始到最后一个间隔的结束......(从第一天(午夜)开始) 1月至3月的最后一天,或从下午1:00至3:59:59.999 PM的第一秒开始)

如果解决方案有效,那将是非常好的,因为这些数组可能有多达10,000个对象...而且这个getRangeWithInterval函数可能每秒被调用超过一次(并且应该在iPhone 3GS上运行...我希望我'不要求太多)。 :)

1 个答案:

答案 0 :(得分:1)

第一个问题可以通过使用NSPredicate来解决 假设,如果对象中的第二个NSNumber属性被称为secondNumber

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"secondNumber >= 3 && secondNumber <= 13"];
NSArray *filteredArray = [array1 filteredArrayUsingPredicate:predicate];

希望它能编译 - 我在没有XCode的情况下编写它。

第二个问题听起来有点困难 让我考虑一下......