2010-12-03 1 views
1

dictionaryWithDictionaryメソッドを使用してNSDictionaryを作成しようとしています。しかし、私の最初のNSDictionaryは、空の値を持ついくつかのキーを持つかもしれません。空の値を持つキーを持たないBを作成するにはどうすればよいですか?私はNSDictionaryの各空でないキーに対応する行をUITableViewに設定するために、このすべてを行っています。空の値を持たないNSDictionaryをコピーしていますか?

このようなものについてはどのように
+2

この場合、「空の値」とは何ですか。 NSDictionaryは 'nil'値を許可しません。 –

+0

変数が空白のキーです。 –

+1

これはまだ助けにならない、辞書の値は何でも、NSString、NSNumber、独自のカスタムクラスさえできます。辞書に特定のキーの値が含まれていない場合、 'objectForKey:'は 'nil'を返します。あなたの値が長さゼロの文字列または '[NSNull null]'の値である場合は、私たちにお知らせください。 Cocoaには "空の変数"というものはありません。 – dreamlax

答えて

1

NSMutableDictionary *destDictionary = [NSMutableDictionary dictionaryWithCapacity:[sourceDictionary count]]; 
NSEnumerator *keyEnumerator = [[sourceDictionary allKeys] objectEnumerator]; 
id key; 
while (key = [keyEnumerator nextObject]) 
    { 
    NSString *object = [sourceDictionary objectForKey:key]; 
    if ([object length] == 0) 
     continue; 
    [destDictionary setObject:object forKey:key]; 
    } 
+0

値には何が入りますか? –

+0

私のコード例では 'object'が 'value'として始まりました - そして、私はすべての 'value'を 'object'に変更することを怠りました。サンプルが修正されました。あなたが望むなら、(!object)の代わりに(object == nil)と言うことができます。 – westsider

+0

優秀な例!残念ながら、それはうまくいきません。私は値がすべて空白( "")に送られても、キーが存在する限りオブジェクトが存在すると思います。私はそれを回避する方法がわかりません。 –

0

ます。また、その値の長さを持っており、そこからあなたの新しい辞書を作成したキーをフィルタリング、ブロックテストを使用することができます。

NSSet *keySet = [dictionary keysOfEntriesPassingTest: 
       ^(id key, id obj, BOOL *stop) { 
        return (BOOL)[obj length]; 
       }]; 

NSArray *keys = [keySet allObjects]; 
NSArray *nonEmptyObjects = [dictionary objectsForKeys:keys notFoundMarker:@""]; 
NSDictionary *newDict = [NSDictionary dictionaryWithObjects:nonEmptyObjects 
                forKeys:keys]; 
関連する問題