Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 筛选NSArray以生成新的NSArray以用于tableview方法_Ios_Nsarray_Nspredicate_Uitableview - Fatal编程技术网

Ios 筛选NSArray以生成新的NSArray以用于tableview方法

Ios 筛选NSArray以生成新的NSArray以用于tableview方法,ios,nsarray,nspredicate,uitableview,Ios,Nsarray,Nspredicate,Uitableview,我有一个NSArray,看起来像这样: {"result": [ { "epoch":"1371333600" }, { "epoch":"1371420000" }, { "epoch":"1371333600" } ] } 我想对NSArray进行排序并创建一个新的NSArray,这样我就可以更容易地使用ta

我有一个NSArray,看起来像这样:

{"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);

干杯

我知道,问题是我有不同的大纪元,有些是相同的。所有这些都需要放在一个部分中。看我的例子。