我正在尝试将字典设置为具有带有数值的字符串键(需要递增。
这就是我使用值 1 进行初始化的方式。
[person.list setObject:[NSNumber numberWithInteger:1] forKey:name];
我将如何根据需要增加值?
我正在尝试将字典设置为具有带有数值的字符串键(需要递增。
这就是我使用值 1 进行初始化的方式。
[person.list setObject:[NSNumber numberWithInteger:1] forKey:name];
我将如何根据需要增加值?
从字典中获取键的对象,进行修改,然后将该对象添加到字典中以获得相同的键,这将替换以前的对象。
NSInteger number = [[dict objectForKey:name] integerValue];
number+=1;
[dict setObject:[NSNumber numberWithInteger:number] forKey:name];
使用甜蜜的类别,
@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*ng sweeter 也是 Dictionary 上的一个类别:
@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。如果需要,请改为这样做。
是的。并为与数字无关的键添加一些例外
如果它的顺序增量比 astatic
integer
会有所帮助!
static int increment = 1;
[person.list setObject:[NSNumber numberWithInteger:increment++] forKey:name];
如果您不知道static
变量,这个问题可能会有所帮助。
不太确定您要达到的目标,但一种解决方案可能是
[person.list setObject:[NSNumber numberWithInteger:person.list.count+1] forKey:name];
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
. (也可能希望将 person 的 list 属性更改为不同的名称。List 意味着类似数组的结构而不是 Dictionary。)
您可以使用新的 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];
该@(...)
语法将原始数字转换为 NSNumber 对象。虽然语法是of[name]
的简写。setObject:forKey:
NSMutableDictionary