Smalltalk,从计数器字典中增加一个值

时间:2018-05-19 22:50:51

标签: dictionary smalltalk

我正在使用Smalltalk,我有"推文"收集,每条推文都有"用户"我希望用户在字典中统计推文。

所以我必须在字典的每个键中添加一个计数器,并且必须在第一次获得用户时添加键。

我在这段代码中考虑添加,我想知道人类是否可以恢复和高效还是有更好的方法来做到这一点

tweetCountUserFrom: tweet in: aDictionary
    | user |
    user := tweet user.
    aDictionary at: user ifAbsentPut: 0.
    aDictionary at: user put: (result at: user) + 1

1 个答案:

答案 0 :(得分:8)

您的代码足够清晰(即使它可能包含错误,因为result变量本应为aDictionary)。无论如何,意图是明确的,并且确实(或预期会)与知名对象相同,即Bag。那么,让我们看看代码如何与Bag的实例一起使用(熟悉Smalltalk的Collection层次结构总是一个好主意)。以下是您可以获得相同结果的方法

tweetCountUserFrom: tweet in: aBag
  aBag add: tweet user

就是这样!

当您需要查看tweets user已创作的人数时,您只需要评估

 aBag occurrencesOf: user

在内部,aBag将保留Dictionary,并将按照您在代码中的预期方式进行维护。但是,通过使用现有对象,您将使代码更简单,更简单,更易于阅读和维护。你也会减少失败的概率,因为Bags现在已经开了40多年了,所以他们几乎没有机会解雇你。