我有一系列日期:
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-11 23:00:00 +0000",
"2014-05-11 23:00:00 +0000"
我想把这个数组分成两个不同的,并放入一个数组,
我想要的结果:
(
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
),
(
"2014-05-11 23:00:00 +0000",
"2014-05-11 23:00:00 +0000"
)
以下是我尝试的内容:
self.tempDatesArray - array of dates (unique)
tempArray - array of all dates
self.tempDatesArray = [[[NSOrderedSet orderedSetWithArray:[self.tempDatesArray copy]] array] mutableCopy]; // i'm getting all the unique dates from array
if (self.tempDatesArray.count > 0){
for (int j=0;j<self.tempDatesArray.count;j++){
if (tempArray[i] == self.tempDatesArray[j]){
[tempArray2 addObject:tempArray[i]]; // temp array
if (j++){
NSLog(@"i is %i",i);
[resultArray addObject:tempArray2];
NSLog(@"test %@",self.sectionsArray);
tempArray2 = [@[] mutableCopy];
}
}
}
}
我的结果是:
(
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-09 23:00:00 +0000",
"2014-05-11 23:00:00 +0000"
),
(
"2014-05-11 23:00:00 +0000"
)
我因此而感到沮丧,是否有人能让我朝着正确的方向前进?
答案 0 :(得分:2)
又一种方法:
NSMutableArray *result = [NSMutableArray new];
[[arrayOfDates valueForKeyPath:@"@distinctUnionOfObjects.self"] enumerateObjectsUsingBlock:^(NSDate *date, NSUInteger idx, BOOL *stop) {
NSIndexSet *indexSet = [arrayOfDates indexesOfObjectsPassingTest:^BOOL(NSDate *d, NSUInteger idx, BOOL *stop) {
return [d isEqual:date];
}];
[result addObject:[arrayOfDates objectsAtIndexes:indexSet]];
}];
答案 1 :(得分:1)
我认为这样的事情应该有效:
NSArray * allDates = @[...];
NSSet * uniqueDates = [NSSet setWithArray:allDates];
NSMutableArray * groupedDatesArray = [NSMutableArray array];
for (NSDate * uniqueDate in uniqueDates) {
NSMutableArray * sharedDateArray = [NSMutableArray array];
for (NSDate * newDate in allDates) {
if ([newDate isEqualToDate:uniqueDate]) {
[sharedDateArray addObject:uniqueDate];
}
}
[groupedDatesArray addObject:sharedDateArray];
}
NSLog(@"GroupedDates: %@", groupedDatesArray);
答案 2 :(得分:1)
NSSet *set = [NSSet setWithArray:self.tempDateArray];
NSMutableArray *groupedArray = [NSMutableArray array];
for (NSDate *date in [set allObjects]) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = %@", date];
NSArray *matchingArray = [self.tempDateArray filteredArrayUsingPredicate:predicate];
[groupedArray addObject:matchingArray];
}
答案 3 :(得分:0)
首先,你说你正在寻找独特的对象,但是在预期的结果中你有很多重复的东西。你真的想在这做什么?
我怀疑您的第二个2014-05-11 23:00:00 +0000正在丢失,因为将它放入有序集合会将它们合并为一个条目。当第二个05-11条目添加到集合中时,该集合显示“我已经拥有:它不是唯一的”。
为什么并非所有重复的2014-05-09 23:00:00条目都会合并?我不确定。我必须看到更多的代码。也许是浮点问题。毕竟,自参考日期以来,NSDates基本上是围绕浮点的大包装器。比较浮点是一个愚蠢的差事。
还有其他让我对你的代码感到困惑的事情,但在我花时间试图弄清楚你在做什么和为什么之前,你真的想删除你的副本吗?如果是这样,重复之间你有什么宽容?是23:00:00和23:00 00.1相同吗? 23:00:00.0001
或者你只是想把阵列分解成基于日的子阵列?