1. ホーム
  2. objective-c

[解決済み] NSDictionaryのキーに基づいたNSArrayのフィルタリングのためのNSPredicateの使用

2023-02-24 22:02:17

質問

辞書の配列を持っています。

キーに基づいた配列のフィルタリングをしたい。

こんな感じでやってみました。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  %@)", @"Football"];

NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];

これはうまくいきません、結果が出ません。何か間違ったことをしているようです。これは、"SPORT"がアイバーだった場合の方法だと知っています。キーであればおそらく違うと思います。

しかし、私は例を見つけることができませんでした。

ありがとうございます。


更新

検索する文字列を引用符で囲みました。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT ==  '%@')", @"Football"];

やはりうまくいきません。


アップデート 2

解決しました。私は実際にシングルクォートを削除しなければなりませんでしたが、これはガイドに書かれていることに反しているようです。

私の本当の問題は、私はネストされた配列を持っていて、実際に辞書を評価していなかったことです。骨抜きにされました。

どのように解決するのですか?

データ変数が、実際にはSPORTをキーとする辞書を含む配列である限り、それは動作するはずです。

NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"foo" forKey:@"BAR"]];    
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(BAR == %@)", @"foo"]];

この場合のフィルタリングは辞書を含む。

(%@は引用する必要はありません。これはNSPredicateがオブジェクトを生成するときに行われます。)