我试图建立一个字典有一个数值(即需要递增一个字符串键。数字在的NSMutableDictionary
这是我如何与值1
[person.list setObject:[NSNumber numberWithInteger:1] forKey:name];
初始化我怎么会去为需要的值递增?
我试图建立一个字典有一个数值(即需要递增一个字符串键。数字在的NSMutableDictionary
这是我如何与值1
[person.list setObject:[NSNumber numberWithInteger:1] forKey:name];
初始化我怎么会去为需要的值递增?
获取从字典为重点对象,做了修改,然后将该对象添加到字典相同的密钥,这将取代以前的对象。
NSInteger number = [[dict objectForKey:name] integerValue];
number+=1;
[dict setObject:[NSNumber numberWithInteger:number] forKey:name];
非常感谢 – 2013-04-30 05:00:05
如果其连续的增量比static
integer
会有所帮助!
static int increment = 1;
[person.list setObject:[NSNumber numberWithInteger:increment++] forKey:name];
如果您不知道static
变量,this问题可能会有所帮助。
我在字典中有很多条目可能有许多不同的数量。 – 2013-04-30 04:49:36
不能确定你想什么来实现的,而是一个解决方案可能是
[person.list setObject:[NSNumber numberWithInteger:person.list.count+1] forKey:name];
我不需要知道字典中条目的当前数量,我的目标是检索当前的整数值并将其加1。 – 2013-04-30 04:48:37
@johnhannigan那么严重吗? – 2013-04-30 04:51:11
@johnhannigan **你认真吗?**我已经为iOS开发了3年。我知道'NSDictionary'只能存放Objective-C对象,但这很琐碎,我很难理解你的问题。 – 2013-04-30 05:02:49
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];
首先,确保person.list
是NSMutableDictionary
一个实例。 (也可能希望将人员的列表属性更改为不同的名称,列表意味着类似数组的结构而不是字典)
您可以使用新的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]
语法是NSMutableDictionary
的setObject:forKey:
的简写。
用甜美的屁股类别,
@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,如果需要,可以这样做。
是的。并添加键一些例外不会与数
'increment'使得它听起来像'NSNumber'本身正在改变,这是不可能的,因为它不可变。我会将方法名称更改为其他名称。 – StilesCrisis 2013-04-30 05:27:53
从我的理解有关,一个NSDictionary只能容纳对象的值,就不会这样阻止我刚键入数字? – 2013-04-30 04:45:29
'@(number.intValue + 1)',你知道。 – 2013-04-30 04:45:55