2009-08-12 16 views
0

私はこれを求めている理由は、今はNSMutableSetの整数とそれに対応するNSMutableArrayを使って残りのデータを格納しているからですが、私はその言語を正しく使用していないと思います。ここに私のコードがあります:init関数で目的C:NSMutableDictionariesのNSMutableSetを作成し、辞書値のいずれかに基づいて一意にするにはどうすればよいですか?

self.markerList = [[NSMutableArray alloc] init]; 
self.markerIdSet = [[NSMutableSet alloc] init]; 

そしてセットや配列を更新機能:

- (void) addMarker: (RMMarker*)marker AtLatLong:(CLLocationCoordinate2D)point { 
    if (![self.markerIdSet member: [node objectForKey:@"id"]]) { 
    [self.markerIdSet addObject:[node objectForKey:@"id"]]; 
    [self.markerList addObject:marker]; 
    } 
} 

答えて

3

私は、オブジェクトのハッシュコードなどが変更される可能性があるように、セット内のキーの一部として可変オブジェクトを持っていることに少し気を付けるでしょうが、セットはそれについて知りませんでした(addMarkerがその後、オブジェクトと新しいハッシュコードと戻ってそれを追加します)

しかし、あなたの例では、あなただけの辞書を使用することはできません(または私は何かが足りないのですか?)

self.markerDict = [[NSMutableDictionary alloc]init]; 

- (void) addMarker: (RMMarker*)marker AtLatLong:(CLLocationCoordinate2D)point { 
    if ([nil != [self.markerDict [node objectForKey:@"id"]]) { 
     [self.markerDict setValue:marker forKey:[node objectForKey:@"id"]]; 
    } 
} 
3

NSMutableSetは、ユニークな要素が含まれています。一意性はhashisEqualsのメソッドで決まります。したがって、必要な処理を行うには、NSMutableDictionaryをサブクラス化または委譲し、具体的なクラスでこれらのメソッドを実装して、必要な特定のキーが等価およびハッシュファクタであるようにします。

2

はのNSMutableSetをしないでくださいNSMutableDictionary; NSMutableDictionaryプロパティを持つカスタムクラスを作成します。このカスタムクラスでは、IDとして、-isEqual:-hashを実装する必要があります。このオブジェクトは、IDが等しい場合は同じオブジェクトになり、同じIDを持つオブジェクトが同じハッシュになります。

More documentation-isEqual:および-hashに関しては、

関連する問題