混合基元和可可集合时实现可变性

Jor*_*eña 0 c++ iphone cocoa objective-c

好吧,我想我可能会过度复杂化这个问题,但我确实陷入困境.基本上,我试图模拟一个重量组,特别是一个奥运重量组.所以,我有其为45磅的条,然后我分别具有2个权重的2.5磅,4 5的磅,然后10 2,25,35,和45.这使得总共300磅.

bar = 45 lbs
2 of 2.5
4 of 5
2 of 10
2 of 25
2 of 35
2 of 45
Run Code Online (Sandbox Code Playgroud)

我想对这个重量集进行建模,以便我掌握这些信息:重量和重量.我知道我可以对此进行硬编码,但最终我想让用户输入他们可能拥有的每个重量的数量.

无论如何,最初我以为我可以简单地NSDictionary使用关键是重量,例如35,而值是数量.

当然我不能将原语存储在一个NSDictionary或其他Cocoa集合中,所以我必须将每个整数封装在一个NSNumber.然而,我对这个权重集建模的重点是我可以模拟某些权重的使用.例如,如果我使用35磅.重量需要2关(每侧一个),所以我必须去编辑35磅的值.重量来反映我从数量中扣除2的事实.

这涉及繁琐的任务,即拆箱NSNumber,转换回原语,进行数学运算,然后重新装箱NSNumber并将新结果分配给中的适当位置NSDictionary.经过一番搜索,我确认了我最初的预感,这不是一个好主意.

所以我有几个问题.首先,除了使用字典式解决方案之外,还有更好的方法来设置权重集吗?如果没有,建议的方法是什么?我是否必须离开可可领域并使用某种C++ STL模板,例如map

我已经看到了一些信息NSDecimalNumber,我应该使用它吗?

就像我说的那样,如果我过于复杂,我也不会感到惊讶.我真的很感激任何帮助,谢谢.

编辑:我开始认为所描述的权重集'定义'确实应该是不可变的,因为它毕竟一个定义.然后当我使用一定的重量时,我可以添加某种计数器.问题是,计数器也将是某种形式的集合,其值将被修改(添加到),以便我可以将其与特定权重相关联.所以我想我遇到了同样的问题.

我想我想要的是创建一个'克隆',可以说我可以轻松修改的权重集定义(模拟单个权重的使用).

对不起,我已经烧坏了.

Chu*_*uck 5

将其存储在字典中并不是很自然.我认为最好的方法是制作一个表示权重的Weight类,并将它们粘贴在NSCountedSet中.你可以得到各种重量和各种重量,你可以得到整套[weightSet valueForKeyPath:@"@sum.weightInPounds"]的重量(假设重量有一个weightInPounds表示它们有多重的属性).

您可以在NSCountedSet中使用NSNumbers并根据需要将它们相加@sum.integerValue,但对我来说似乎有点尴尬.无论如何,NSCountedSet绝对是一个比NSDictionary更自然的集合来存储 - 好吧,一个计数集.