Разблокировать aDictionary в pharo - PullRequest
0 голосов
/ 31 мая 2018

У меня есть объект типа a Dictionary('CMFireAutomataModel'->a Dictionary('nbAshes'->193 'nbFires'->851 ) ), и я хотел бы иметь что-то вроде Dictionary('nbAshes'->193 'nbFires'->851 ).

Я не знаю, как "разложить" первый словарь.

1 Ответ

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

Допустим, у вас есть Dictionary с ключами Strings и его значениями Numbers или Dictionaries одного и того же вида (т. Е. С ключами, которые являются строками, и значениями, которые являются диктатами или числами).Нам нужен способ «продвинуть» или «развернуть» все строковые ключи и числа в родительском словаре.

unstack: aDictionary
  | dict |
  dict := aDictionary class new.
  aDictionary keysAndValuesDo: [:k :v | | d |
    v isNumber
      ifTrue: [dict at: k put: v]
      ifFalse: [
         d := self unstack: v.
         dict addAll: d associations]].
  ^dict

Обратите внимание, что я использовал aDictionary class new, чтобы убедиться, что метод отвечает с помощьюDictionary того же типа (например, IdentityDictionary и т. Д.).

Обратите также внимание, что метод может использоваться в любом классе.Я не поместил это в Dictionary, потому что я не думаю, что это достаточно общее (хотя это немного упростило бы код)

...