Допустим, у вас есть 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
, потому что я не думаю, что это достаточно общее (хотя это немного упростило бы код)