在 pharo 中取消堆叠字典
Unstack aDictionary in pharo
我有一个像 a Dictionary('CMFireAutomataModel'->a Dictionary('nbAshes'->193 'nbFires'->851 ) )
这样的对象,我想要一个像 Dictionary('nbAshes'->193 'nbFires'->851 )
.
这样的对象
我不知道如何"unstack"第一本词典。
假设您有一个 Dictionary
,它的键是 Strings
,它的值是相同类型的 Numbers
或 Dictionaries
(即键是字符串和值是字典或数字)。我们想要的是一种将所有字符串键和数字 "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
中,因为我认为这不够通用(即使那样会稍微简化代码)
我有一个像 a Dictionary('CMFireAutomataModel'->a Dictionary('nbAshes'->193 'nbFires'->851 ) )
这样的对象,我想要一个像 Dictionary('nbAshes'->193 'nbFires'->851 )
.
我不知道如何"unstack"第一本词典。
假设您有一个 Dictionary
,它的键是 Strings
,它的值是相同类型的 Numbers
或 Dictionaries
(即键是字符串和值是字典或数字)。我们想要的是一种将所有字符串键和数字 "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
中,因为我认为这不够通用(即使那样会稍微简化代码)