Smalltalk, увеличить значение из словаря счетчиков - PullRequest
0 голосов
/ 20 мая 2018

я работаю над Smalltalk, у меня есть коллекция "твитов", у каждого твита есть "пользователь", и я хочу посчитать твиты пользователя в словаре.

Поэтому мне нужно добавить счетчик в каждом ключесловаря, и я должен добавить ключи в первый раз, когда я получаю пользователя.

Я думал в этом коде для добавления, я хочу знать, является ли человек пригодным для использования и эффективен, или есть лучший способ сделать это

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

1 Ответ

0 голосов
/ 20 мая 2018

Ваш код достаточно ясен (хотя он, вероятно, содержит ошибку, поскольку вместо переменной result должно было быть aDictionary).В любом случае, намерение ясно и делает (или, как ожидается, сделает) то же, что делает известный объект, что Bag.Итак, давайте посмотрим, как код работал бы с экземпляром Bag (всегда полезно лучше узнать иерархию Collection Smalltalk).Вот как вы можете получить тот же результат

tweetCountUserFrom: tweet in: aBag
  aBag add: tweet user

Вот и все!

Когда пришло время увидеть, сколько tweets a user написано, вы будетенужно только оценить

 aBag occurrencesOf: user

Внутренне, aBag будет содержать Dictionary и будет поддерживать его так, как вы хотели в своем коде.Однако, используя существующий объект, вы сделаете свой код проще, короче и проще для чтения и обслуживания.Вы также уменьшите вероятность неудачи, так как Bags существует уже более 40 лет, так что у них мало шансов вас убить.

...