You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pharo中按指定键对数组中的字典进行排序?

按字典共同键排序数组的解决方案

从你给出的数组/字典语法来看,我先默认你用的是Scala场景,同时也补充Python的实现方案——毕竟按字典键排序是多语言都常见的需求~

Scala 实现方法

1. 用sortBy快速排序(最直观)

Scala集合自带的sortBy方法可以直接指定排序依据。注意你的age值是字符串类型,一定要转成整数再排序,不然会出现"100"排在"20"前面的字符串排序问题:

// 先定义你的目标数组
val data = Array(
  Map("age" -> "20", "ID" -> 1254),
  Map("age" -> "35", "ID" -> 1350),
  Map("age" -> "42", "ID" -> 1425)
)

// 按age升序排序
val sortedAsc = data.sortBy(_("age").toInt)

// 需要降序的话,直接加reverse即可
val sortedDesc = data.sortBy(_("age").toInt).reverse

2. 用sortWith自定义排序逻辑(更灵活)

如果后续需要更复杂的排序规则,比如多键组合排序,可以用sortWith手动比较元素:

// 升序排序
val sortedAsc = data.sortWith((a, b) => a("age").toInt < b("age").toInt)

// 降序排序
val sortedDesc = data.sortWith((a, b) => a("age").toInt > b("age").toInt)

Python 实现方法

Python里用内置的sorted函数配合key参数就能轻松搞定:

# 定义包含字典的列表
data = [
    {"age": "20", "ID": 1254},
    {"age": "35", "ID": 1350},
    {"age": "42", "ID": 1425}
]

# 按age升序排序(同样要转成整数)
sorted_asc = sorted(data, key=lambda x: int(x["age"]))

# 降序排序只需加reverse=True
sorted_desc = sorted(data, key=lambda x: int(x["age"]), reverse=True)

关键注意事项

  • 确保所有字典都包含age键,如果有缺失的情况,可以用默认值兜底:比如Scala里用_.getOrElse("age", "0").toInt,Python里用x.get("age", "0")。
  • 必须将age的字符串值转为数值类型再排序,否则字符串排序会按字符顺序处理,导致不符合预期的结果。

内容的提问来源于stack exchange,提问作者ludo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:44:06