2013-04-30 57 views
1

我试图建立一个字典有一个数值(即需要递增一个字符串键。数字在的NSMutableDictionary

这是我如何与值1

[person.list setObject:[NSNumber numberWithInteger:1] forKey:name]; 

初始化我怎么会去为需要的值递增?

+0

从我的理解有关,一个NSDictionary只能容纳对象的值,就不会这样阻止我刚键入数字? – 2013-04-30 04:45:29

+2

'@(number.intValue + 1)',你知道。 – 2013-04-30 04:45:55

回答

7

获取从字典为重点对象,做了修改,然后将该对象添加到字典相同的密钥,这将取代以前的对象。

NSInteger number = [[dict objectForKey:name] integerValue]; 
number+=1; 

[dict setObject:[NSNumber numberWithInteger:number] forKey:name]; 
+0

非常感谢 – 2013-04-30 05:00:05

0

如果其连续的增量比staticinteger会有所帮助!

static int increment = 1; 

[person.list setObject:[NSNumber numberWithInteger:increment++] forKey:name]; 

如果您不知道static变量,this问题可能会有所帮助。

+0

我在字典中有很多条目可能有许多不同的数量。 – 2013-04-30 04:49:36

0

不能确定你想什么来实现的,而是一个解决方案可能是

[person.list setObject:[NSNumber numberWithInteger:person.list.count+1] forKey:name]; 
+0

我不需要知道字典中条目的当前数量,我的目标是检索当前的整数值并将其加1。 – 2013-04-30 04:48:37

+0

@johnhannigan那么严重吗? – 2013-04-30 04:51:11

+0

@johnhannigan **你认真吗?**我已经为iOS开发了3年。我知道'NSDictionary'只能存放Objective-C对象,但这很琐碎,我很难理解你的问题。 – 2013-04-30 05:02:49

0
NSNumber *num = [person.list objectForKey:name]; 
    if(!num) [person.list setObject:[NSNumber numberWithInteger:1] forKey:name]; 
    else [person.list setObject:[NSNumber numberWithInteger:([num intValue]+1)] forKey:name]; 
0

首先,确保person.listNSMutableDictionary一个实例。 (也可能希望将人员的列表属性更改为不同的名称,列表意味着类似数组的结构而不是字典)

您可以使用新的NSDictionary语法和原语来对象装箱。我假设这里的数字是一个无符号整数。

person.list[name] = @([person.list[name] unsignedIntegerValue] + 1); 

即语法类似于(拆分成多个行以提高可读性)

NSUInteger previous = [[person.list objectForKey:name] unsignedIntegerValue]; 
NSNumber *incremented = [NSNumber numberWithUnsignedInteger:previous + 1]; 
[person.list setObject:incremented forKey:name]; 

@(...)的语法转换一个primitive number to an NSNumber object[name]语法是NSMutableDictionarysetObject:forKey:的简写。

0

用甜美的屁股类别,

@interface NSNumber (NSNumber_Incrementing)  
-(NSNumber *)increment;  
@end 

@implementation NSNumber (NSNumber_Incrementing)  
-(NSNumber *)increment { 
    return [NSNumber numberWithInt:[self intValue] + 1]; 
} 


[person.list setObject:[mynumb increment] forKey:name]; 

,这意味着你需要持有mynumb

添加协议NSDecimal等。

@protocol Incrementing 
- (NSNumber *)increment; 
@end 
so the above might be 
@interface NSNumber (NSNumber_Incrementing) <Incrementing> 
... 
@interface NSDecimableNumber (NSNumber_Incrementing) <Incrementing> 

但即使F *纳克甜是字典类别:

@interface NSDictionary (NSDictionary_SweetIncrementing) 
    -(void) incrementNumberForKey:name; 
@end 

@implementation NSDictionary (NSDictionary_SweetIncrementing) 
-(void) incrementNumberForKey:name throws NSNumberException { 
     NSNumber numb = (NSNumber *)[self valueForKey: name];   
     return [self setValue: [numb increment] forKey: name]; 
} 
@end 

valueForKey和setValue方法属于NSDictionary中。您正在使用提供objectForKey和setObject ....的一个NSMutableDictionary,如果需要,可以这样做。

是的。并添加键一些例外不会与数

A similar question

+0

'increment'使得它听起来像'NSNumber'本身正在改变,这是不可能的,因为它不可变。我会将方法名称更改为其他名称。 – StilesCrisis 2013-04-30 05:27:53