在 pharo 中取消堆叠字典

Unstack aDictionary in pharo

我有一个像 a Dictionary('CMFireAutomataModel'->a Dictionary('nbAshes'->193 'nbFires'->851 ) ) 这样的对象,我想要一个像 Dictionary('nbAshes'->193 'nbFires'->851 ).

这样的对象

我不知道如何"unstack"第一本词典。

假设您有一个 Dictionary,它的键是 Strings,它的值是相同类型的 NumbersDictionaries(即键是字符串和值是字典或数字)。我们想要的是一种将所有字符串键和数字 "promote" 或 "unstack" 到母字典的方法。

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 等)进行回答。

另请注意,该方法可以进入任何 class。我没有把它放在 Dictionary 中,因为我认为这不够通用(即使那样会稍微简化代码)