1

次のフィルタリングコードで構成され、それを使用して作成されたNSSet(「果物」など)があります。NSManagedObjects

NSSet *fruits = [self.allFruits filteredSetUsingPredicate:
                         [NSPredicate predicateWithFormat:@"quantity > 10"];

各果物には、次のプロパティ (属性) があります: name(例: リンゴ、オレンジ、バナナ)、color(赤、黄、緑)、およびquantity(100、20、10)。

果物の をキーとして、オブジェクトとしてを含むNSDictionaryこれから を作成する最も効率的な方法は何でしょうか(例: key:object: apple: 100 orange: 20)?NSSetnamequantities

これは、ブロック列挙を使用してこれを行う方法です。

__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];

[fruits enumerateObjectsUsingBlock:^(id fruit, BOOL *stop) {
      [fruitsAndColors setObject:fruit.color forKey:fruit.name];
}];

同じことを達成するためのよりエレガントな方法はありますか?

ありがとうございました!

4

2 に答える 2

3

それは速くて簡単な方法です。

NSMutableArray *array = [NSMutableArray arrayWithCapacity:ManagedObjectItems.count];
[[ManagedObjectItems allObjects] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    Diary_item_food *food = obj;
    NSArray *keys = [[[food entity] attributesByName] allKeys];
    NSDictionary *dict = [obj dictionaryWithValuesForKeys:keys];
    [array addObject:dict];
}];
于 2013-08-01T04:41:49.897 に答える
2

カスタムNSManagedObjectサブクラスを、必要なキーと値を使用して各オブジェクトをディクショナリに書き込むメソッドで使用してみましたか。

次に、NSSetを列挙し、各オブジェクトでこのメソッドを呼び出して、辞書のコレクションを作成できます。

あなたが一般的な質問をしたので、私はあなたに一般的な考えを与えるだけです。コードを書こうとすると、さらに問題が発生した場合に戻ってくる可能性があります。

于 2012-11-24T14:57:00.187 に答える