Ios 筛选NSArray以生成新的NSArray以用于tableview方法
我有一个NSArray,看起来像这样:Ios 筛选NSArray以生成新的NSArray以用于tableview方法,ios,nsarray,nspredicate,uitableview,Ios,Nsarray,Nspredicate,Uitableview,我有一个NSArray,看起来像这样: {"result": [ { "epoch":"1371333600" }, { "epoch":"1371420000" }, { "epoch":"1371333600" } ] } 我想对NSArray进行排序并创建一个新的NSArray,这样我就可以更容易地使用ta
{"result":
[
{
"epoch":"1371333600"
},
{
"epoch":"1371420000"
},
{
"epoch":"1371333600"
}
]
}
我想对NSArray进行排序并创建一个新的NSArray,这样我就可以更容易地使用tableview方法来计算节和行
所有相同的日期需要放在一个部分。
数组应该如下面的示例所示,但我不知道如何到达那里。我试过NSPredicate并使用了一个循环,但它不起作用
我想要的是:
{"result":
[
{"data":
[
{
"epoch":"1371333600"
},
{
"epoch":"1371333600"
}
]
},
{"data":
[
{
"epoch":"1371420000"
}
]
}
]
}
我的NSPredicate看起来像这样,但没有给出结果
_finalArray = [[NSMutableArray alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"epoch IN %@", [_resultArray valueForKey:@"epoch"]];
_predicateDate = [NSMutableArray arrayWithArray:[dataSortArray filteredArrayUsingPredicate:predicate]];
if ([_predicateDate count] != 0)
{
NSDictionary *itemsArrayDict = [NSDictionary dictionaryWithObject:_predicateDate forKey:@"data"];
[_finalArray addObject:itemsArrayDict];
}
您好,您可以使用NSPredicate来筛选数组,如:
//NSPredicate to filter an array
NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"hello" forKey:@"Test"]];
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(Test == %@)", @"hello"]];
感谢非常适合这个场合,因为它可以让您获得独特的字符串
NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"2222222" forKey:@"epoch"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"2222222" forKey:@"epoch"];
NSDictionary *dict3 = [NSDictionary dictionaryWithObject:@"1111111" forKey:@"epoch"];
NSArray *dictArray = @[dict1, dict2, dict3];
NSMutableArray *finalArray = [[NSMutableArray alloc]init];
NSArray *epoches = [dictArray valueForKey:@"epoch"];
NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:epoches];
for (NSString *string in orderedSet) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"epoch == %@", string];
NSArray *resultsArray = [dictArray filteredArrayUsingPredicate:predicate];
[finalArray addObject:resultsArray];
}
看起来您正在使用字典和数组。以下是我取得的成就:
(result
(data
{
epoch = 1371333600;
},
{
epoch = 1371333600;
}
),
(data
{
epoch = 1371420000;
}
)
)
我没有使用谓词,但它看起来正在工作:)。代码如下:
// Initial input
NSArray *result = @[@{@"epoch":@"1371333600"},@{@"epoch":@"1371420000"},@{@"epoch":@"1371333600"}];
// Get unique values for the input
NSSet *resultSet = [NSSet setWithArray:result];
// Here we are going to store the final result
NSMutableArray *newResult = [[NSMutableArray alloc] init];
// Loop over the unique items
for (NSDictionary *uniqueItem in resultSet) {
// Here we are going to store the grouped data
NSMutableArray *dataResult = [[NSMutableArray alloc] init];
// Loop over the initial input
for (NSDictionary *resultItem in result) {
// Search for all the items that are equal to the uniqe
// I would rather include a count instead of repeating values :)
if([uniqueItem isEqual:resultItem]) {
[dataResult addObject:resultItem];
}
}
[newResult addObject:dataResult];
}
NSLog(@"%@", newResult);
干杯 我知道,问题是我有不同的大纪元,有些是相同的。所有这些都需要放在一个部分中。看我的例子。