diff -r 8243f9dd696d -r bcd17ecee2c6 KeyedCollection.st --- a/KeyedCollection.st Mon Sep 17 11:14:24 2018 +0200 +++ b/KeyedCollection.st Mon Sep 17 14:53:53 2018 +0200 @@ -61,6 +61,32 @@ !KeyedCollection class methodsFor:'instance creation'! +decodeFromLiteralArray:anArray + "create & return a new instance from information encoded in anArray." + + |dictionary + sz "{ Class: SmallInteger }"| + + sz := anArray size. + dictionary := self new:sz//2. + 2 to:sz by:2 do:[:idx | |key val| + key := (anArray at:idx) decodeAsLiteralArray. + val := (anArray at:idx+1) decodeAsLiteralArray. + dictionary at:key put:val + ]. + ^ dictionary + + " + (SmallDictionary new + at:1 put:'one'; + at:2 put:'two'; + yourself + ) literalArrayEncoding decodeAsLiteralArray + " + + "Created: / 17-09-2018 / 14:51:59 / Stefan Vogel" +! + withAll:aCollection "create a KeyedCollection from another Collection with keys" @@ -499,6 +525,34 @@ "Created: / 14-09-2018 / 16:56:36 / Stefan Vogel" ! ! +!KeyedCollection methodsFor:'converting'! + +literalArrayEncoding + |literalArray idx| + + literalArray := Array new:(self size * 2)+1. + literalArray at:1 put:self class name. + idx := 2. + self keysAndValuesDo:[:eachKey :eachValue | + literalArray + at:idx put:eachKey literalArrayEncoding; + at:idx+1 put:eachValue literalArrayEncoding. + idx := idx + 2. + ]. + ^ literalArray + + " + |dict| + + dict := SmallDictionary new. + dict at:1 put:'bla'. + dict at:'fasel' put:#[1 2 3 4]. + dict literalArrayEncoding + " + + "Created: / 17-09-2018 / 14:49:52 / Stefan Vogel" +! ! + !KeyedCollection methodsFor:'enumerating'! associationsDo:aBlock