如何按Smalltalk中的值对字典进行排序?

Mos*_*cho 4 dictionary smalltalk pharo

我有一个像这样的字典:

a PluggableDictionary(
    Rankable1->8.5
    Rankable2->9.0
)
Run Code Online (Sandbox Code Playgroud)

我只需要一个OrderedCollection,其Rankable对象按降序排列:

a OrderedCollection(
    Rankable2
    Rankable1
)
Run Code Online (Sandbox Code Playgroud)

我注意到按键排序很容易,但我发现按值排序有点困难.这样做的小方法是什么?

Dav*_*jan 5

如果你需要在非关键循环中使用一个镜头排序集合,你可能会使用这样的东西(使用pharo语法来初始化示例字典):

pd := PluggableDictionary newFromPairs: { 'a' . 2 . 'b' . 1 . 'c' . 3} . 

(pd associations asSortedCollection: [:x :y | x value < y value]) 
            collect: [:assoc | assoc key].
Run Code Online (Sandbox Code Playgroud)

如果您需要更频繁地使用它,那么您可能会考虑引入自己的类来保持此集合的计算.