如何在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
相关产品推荐
相关产品推荐

