0

次の多次元配列があります(わかりやすくするために削除および削減されています)

[
    {
        "type": "type1",
        "docs": [
            {
                "language": "EN"
            },
            {
                "language": "DE"
            },
            {
                "language": "EN"
            }
        ]
    },
    {
        "type": "type2",
        "docs": [
            {
                "language": "EN"
            }
        ]
    },
    {
        "type": "type3",
        "docs": [
            {
                "language": "FR"
            },
            {
                "language": "DE"
            },
            {
                "language": "DE"
            }
        ]
    }
]

フィルタリングしたいので、言語が DE のドキュメント オブジェクトのみが表示されます。言い換えれば、私はこれが必要です:

[
    {
        "type": "type1",
        "docs": [
            {
                "language": "DE"
            }
        ]
    },
    {
        "type": "type2",
        "docs": []
    },
    {
        "type": "type3",
        "docs": [
            {
                "language": "DE"
            },
            {
                "language": "DE"
            }
        ]
    }
]

私の配列は、最初に次のコードによって作成されます。

NSMutableArray *docsArray;
[self setDocsArray:[downloadedDocsArray mutableCopy]];

配列をループして、不要なオブジェクトを削除しようとしました。配列をループして、必要なオブジェクトを新しい配列にコピーしようとしました。ループの代わりに NSPredicate を使用してみましたが、ほとんど成功しませんでした。

誰かが私を正しい方向に向けることができますか?

前もって感謝します。

4

1 に答える 1

3

フィルタリングする配列を含む辞書を取得するには、配列を反復処理する必要があります。

NSArray* results;
NSMutableArray* filteredResults= [NSMutableArray new]; // This will store the filtered items
// Here you should have already initialised it 
for( NSDictionary* dict in results)
{
    NSMutableDictionary* mutableDict=[dict mutableCopy];
    NSArray* docs= dict[@"docs"];
    NSPredicate* predicate= [NSPredicate predicateWithFormat: @"language like 'DE'"];
    docs= [docs filteredArrayUsingPredicate: predicate];
    [mutableDict setObject: docs forKey: @"docs"];
    [filteredResults addObject: mutableDict];
}
于 2013-01-10T18:31:33.417 に答える