どこを継承すればいいのかわからなかったので,とりあえずObjectクラスの下で作ってみました.
なぜ順序付きSet,Dictionaryがないのか不思議です.
Set系は集合だから順序なんて必要ないということなんでしょうかね・・・.
Object subclass: #OrderedDictionary
instanceVariableNames: 'keys content'
classVariableNames: ''
poolDictionaries: ''
category: 'Ringo-Collection'
OrderedDictionary methodsFor: 'enumerating'
do: aBlock
keys do:[:v | aBlock value:v].
OrderedDictionary methodsFor: 'initialize-release'
initialize
keys := OrderedCollection new.
content := Dictionary new.
OrderedDictionary methodsFor: 'accessing'
at: key
^ content at: key! !
OrderedDictionary methodsFor: 'accessing'
at: key put: value
content at: key put: value.
(keys includes:key) ifFalse:[
keys add: key.
].
^ value.
OrderedDictionary methodsFor: 'accessing'
keys
^ keys
OrderedDictionary methodsFor: 'accessing'
values
| out |
out := WriteStream on: (Array new: keys size).
keys do:[:v |
out nextPut: (content at:v)].
^ out contents
実行すると‥‥‥
x := OrderedDictionary new.
x
x at:#one put:1.
x at:#two put:2.
x values
x do:[:v | Transcript cr;show:v].
==>one
==>two