この問題を調べようとしましたが、運が悪かったので、オブジェクトが不変配列でもあるキーとオブジェクトの「不変ディクショナリ」を作成する関数を構築したいと考えています。
この関数に渡すのは、作成したオブジェクトの配列です。各オブジェクトには、ディクショナリ内のオブジェクトをグループ化するために使用するキー プロパティがあります。
私はこれを思いつき、テストして動作しましたが、これを行うためのより良い/安全な方法があるかどうかを確認したいと思います.
私は ARC を使用しており、関数から戻ったときにすべてが不変であることを確認したいと考えています。
- (NSDictionary* )testFunction:(NSArray *)arrayOfObjects
{
NSMutableDictionary *tmpMutableDic = [[NSMutableDictionary alloc] init];
for(MyCustomObject *obj in arrayOfObjects)
{
if ([tmpMutableDic objectForKey:obj.key] == nil)
{
// First time we get this key. add key/value paid where the value is immutable array
[tmpMutableDic setObject:[NSArray arrayWithObject:obj] forKey:obj.key];
}
else
{
// We got this key before so, build a Mutable array from the existing immutable array and add the object then, convert it to immutable and store it back in the dictionary.
NSMutableArray *tmpMutableArray = [NSMutableArray arrayWithArray:[tmpMutableDic objectForKey:obj.key]];
[tmpMutableArray addObject:obj];
[tmpMutableDic setObject:[tmpMutableArray copy] forKey:obj.key];
}
}
// Return an immutable version of the dictionary.
return [tmpMutableDic copy];
}