Add values in NSMutableDictionary in iOS with Objective-C

前端 未结 3 1835
死守一世寂寞
死守一世寂寞 2021-02-07 05:44

I\'m starting objective-c development and I would like to ask the best way to implement a list of keys and values.

In Delphi there is the class TDict

相关标签:
3条回答
  • 2021-02-07 06:19

    You'd want to implement your example along these lines:

    EDIT:

    //NSMutableDictionary myDictionary = [[NSMutableDictionary alloc] init];
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
    
    NSNumber *value = [myDictionary objectForKey:myWord];
    
    if (value)
    {
        NSNumber *nextValue = [NSNumber numberWithInt:[value intValue] + 1];
        [myDictionary setObject:nextValue  forKey:myWord];
    } 
    else
    {
        [myDictionary setObject:[NSNumber numberWithInt:1] forKey:myWord]
    }
    

    (Note: you can't store ints or other primitives directly in a NSMutableDictionary, hence the need to wrap them in an NSNumber object, and make sure you call [myDictionary release] when you've finished with the dictionary).

    0 讨论(0)
  • 2021-02-07 06:19

    The other answers are correct, but there is more modern syntax for this now. Rather than:

    [myDictionary setObject:nextValue  forKey:myWord];
    

    You can simply say:

    myDictionary[myWord] = nextValue;
    

    Similarly, to get a value, you can use myDictionary[key] to get the value (or nil).

    0 讨论(0)
  • 2021-02-07 06:20

    Yep:

    - (id)objectForKey:(id)key;
    - (void)setObject:(id)object forKey:(id)key;
    

    setObject:forKey: overwrites any existing object with the same key; objectForKey: returns nil if the object doesn't exist.

    Edit:

    Example:

    - (void)doStuff {
      NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    
      [dict setObject:@"Foo" forKey:@"Key_1"]; // adds @"Foo"
      [dict setObject:@"Bar" forKey:@"Key_2"]; // adds @"Bar"
    
      [dict setObject:@"Qux" forKey:@"Key_2"]; // overwrites @"Bar"!
    
      NSString *aString = [dict objectForKey:@"Key_1"]; // @"Foo"
      NSString *anotherString = [dict objectForKey:@"Key_2"]; // @"Qux"
      NSString *yas = [dict objectForKey:@"Key_3"]; // nil
    }
    

    Reedit: For the specific example there exists a more compact approach:

    [dict
      setObject:
        [NSNumber numberWithInteger:([[dict objectForKey:@"key"] integerValue] + 1)]
      forKey:
        @"key"
     ];
    

    Crazy indentation for readability.

    0 讨论(0)
提交回复
热议问题