最简单的设计是以这种方式拥有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 和hash 方法。
有关如何遵守NSCopying 的更多信息:Implementing NSCopying
有关如何实现isEqual 和hash 的更多信息:Best practices for overriding isEqual: and hash
完成后,您使用对象本身来检索其概率并更新它,将上述代码转换为类似
// 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");
你可以很容易地想到将这个检查捆绑在一个方法中,每次修改概率表时调用它