最簡單的設計是有一個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");
你容易想到的方法捆綁此次檢查的並在每次修改概率表時調用它
編程上有意義,我看到的唯一問題是更新,這也需要您更新每個其他對象的概率,使總數仍等於100%,並且這些對象的概率變化是正確加權的。 – user339946 2013-04-07 17:28:11
這是問題的內在原因,除非您提供一些更新其他值的智能默認值,否則「系統」將不知道如何平衡更新。你可能會決定有一些自動行爲(重新分配所有其他對象之間的差異)幷包裝提供這種行爲的'update'調用。 – 2013-04-07 17:31:30