最简单的设计NSMutableDictionary
是以这种方式拥有一个(可变的,因为你需要更新它)
NSMutableDictionary * probabilityTable = @{
@"objectA" : @0.10, // the @ converts the number to a `NSNumber` (NSDictionary accepts only objects)
@"objectB" : @0.15,
@"objectC" : @0.12
};
等等。
然后为了检索概率
probabilityTable[@"objectA"];
并更新它
probabilityTable[@"objectA"] = @0.16;
编辑
为了额外的乐趣,您可以将对象本身用作字典键。为此,请使这些对象成为类的子类MyObject
(我假设您将为不同的对象类别提供不同的类)。此类必须符合NSCopying
协议并实现isEqual
andhash
方法。
有关如何遵守的更多信息NSCopying
:实施 NSCopying
有关如何实施isEqual
和的更多信息hash
:覆盖 isEqual: 和哈希的最佳实践
完成后,您使用对象本身来检索其概率并更新它,将上述代码转换为类似
// initializing
NSMutableDictionary * probabilityTable = @{
objectA : @0.10,
objectB : @0.15,
objectC : @0.12
};
// retrieving
probabilityTable[objectA];
// updating
probabilityTable[objectA] = @0.16;
编辑 2
如果你想变得花哨,你也可以写一个断言来检查概率总和是否总是 1。检查看起来像
float sum = 0;
for (NSNumber * n in probabilityTable.allValues) {
sum += n.floatValue;
}
NSAssert(sum == 1.0, @"Sum of probabilities must be 1.0");
你可以很容易地想到将这个检查捆绑在一个方法中,并在每次修改概率表时调用它