0

つまり、基本的に私は膨大な数の配列(2次元配列のみ)を持っています...

私のルート配列は、100個の子配列があるとしましょう...

ルート/子配列を照会し、その2つのオブジェクトがhello...に等しい子配列のみを返したい。

だから基本的に私は以下の作り上げのアイデアを持っています...

updatedArray = [rootArray WHERE childArray objectAtIndex:2 == @"hello"];

ご覧のとおり、更新された配列には、rootArrayに40または50の子配列が含まれるようにします...

私が何を意味するのか見てください-データベースの代わりに配列だけを備えたMySQLのようなものですか?

4

2 に答える 2

3

これを試して:

NSMutableArray *updated = [[NSMutableArray alloc] init];
for (NSArray *a in rootArray)
{
    if ([[a objectAtIndex:2] isEqualToString:@"hello"])
        [updated addObject:a];
}

これで、3 番目のオブジェクトがupdatedである配列が含まれます。rootArray@"hello"

使用後は解放することを忘れないでください (ARC を使用しない場合)。

単純なロジックに述語を使用することもできます。NSPredicate クラスを参照してください。

于 2012-07-03T20:26:08.277 に答える
2

NSPredicate次のように、を使用して配列をフィルタリングできます。

NSArray *data = [NSArray arrayWithObjects:
    [NSArray arrayWithObjects:@"One", @"Two", nil]
,   [NSArray arrayWithObjects:@"Three", @"Four", nil]
,   [NSArray arrayWithObjects:@"Nine", @"Two", nil]
,   nil];
NSPredicate *filter = [NSPredicate predicateWithBlock:^BOOL(id array, NSDictionary *bindings) {
    // This is the place where the condition is specified.
    // You can perform arbitrary testing on your nested arrays
    // to determine their eligibility:
    return [[array objectAtIndex:1] isEqual:@"Two"];
}];
NSArray *res = [data filteredArrayUsingPredicate:filter];
NSLog(@"%lu", res.count); 
于 2012-07-03T20:40:14.327 に答える