我们如何通过 pharo 中的特定键对数组中的字典进行排序?

How can we sort dictionaries in an array by a specific key in pharo?

我有一个包含多个词典的数组。我如何使用每个字典都有的键对它们进行排序?

an Array((a Dictionary('age'->'20' 'ID'->1254))(a Dictionary('age'->'35' 'ID'->1350))(a Dictionary('age'->'42' 'ID'->1425)))

您可以通过提供比较块来排序;该块有两个参数(数组中的两个元素),预计为 return 布尔值。

data := { 
    { 'age' -> '20'. 'ID' -> 1254 } asDictionary.
    { 'age' -> '35'. 'ID' -> 1350 } asDictionary.
    { 'age' -> '42'. 'ID' -> 1425 } asDictionary
}.
sorted := data sorted: [ :a :b | (a at: 'age') > (b at: 'age') ].
  • sorted: 将 return 一个排序的集合而不改变接收者
  • sort: 将就地执行排序,return 本身

您还可以使用 asSortedCollection:,这将创建一个始终支持排序不变性的新集合。

sc := data asSortedCollection: [ :a :b | (a at: 'age') > (b at: 'age') ].

"automatically inserted between age 42 and 35"
sc add: {'age' -> '39'. 'ID' -> 1500} asDictionary.
sc "a SortedCollection(a Dictionary('ID'->1425 'age'->'42' ) a Dictionary('ID'->1500 'age'->'39' ) a Dictionary('ID'->1350 'age'->'35' ) a Dictionary('ID'->1254 'age'->'20' ))"