0

カスタム オブジェクトの NSArray があります。カスタム オブジェクトに PageNumber プロパティがあるとします。「customObject.PageNumber は個別です」のような条件で NSArray をフィルタリングしたいと思います。

配列をループして、ページ番号が重複しているオブジェクトを削除できることはわかっています。しかし、それを行う簡単な方法はありますか?私が試してみました、

[myarray valueForKeyPath:@"distinctUnionOfObjects.pageNumber"];

一意のページ番号 (7、8、9 など) が表示されます。しかし、ページ番号だけでなく、カスタム オブジェクト自体が必要です。どんな述語でも私を助けることができますか?

4

2 に答える 2

1

Linq to ObjectiveC と呼ばれる単純なライブラリを作成しました。これは、この種の問題を解決しやすくするメソッドのコレクションです。あなたの場合、Linq-to-ObjectiveC の個別のメソッドが必要です。

NSArray* itemsWithUniquePageNumbers = [items distinct:^id(id item) {
    return [item pageNumber];
}];

これにより、オブジェクトの配列が返され、それぞれに一意のページ番号が付けられます。

于 2013-03-06T08:04:03.270 に答える
0

はい、それはの助けを借りて可能ですNSPredicate

customObject=[(NSArray*)[myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.PageNumber==%d",pageNumber]] lastObject];
//pageNumber is an integer

フィルタリングされた配列はNSArray、述語を使用したフィルタリングの結果であるカスタムオブジェクトの1つです。ページ番号は一意であるため、1つのオブジェクトの配列のみが返されます。lastObject私たちはそれにメッセージを渡すことによってそれを取得します。

参照: http ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1

于 2012-01-03T09:34:45.710 に答える