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

Smalltalk中如何对OrderedCollection按键排序并保留键值对?

在Smalltalk中对OrderedCollection的键值对按键排序并保留完整对象

看起来你是不小心在排序过程中只提取了键,导致结果只返回键而不是完整的键值对。别担心,这是个很常见的小问题,调整一下排序的方式就能解决。

首先,假设你的OrderedCollection里存储的是Association对象(就是Smalltalk里标准的键值对,比如#name -> 'Alice'这种形式),我们直接对集合里的完整元素排序,比较它们的键就可以了:

示例代码

先定义一个包含无序键值对的集合:

| myCollection sortedPairs |
myCollection := OrderedCollection 
    with: (#banana -> 5) 
    with: (#apple -> 3) 
    with: (#cherry -> 7).

如果你之前的写法是类似这样(只返回键):

# 错误示例:只提取键再排序,结果只有键
myCollection collect: [:pair | pair key] sorted: [:a :b | a < b].
"返回结果:#(#apple #banana #cherry)"

那正确的做法是直接对整个集合使用sorted:方法,比较每个键值对的key:

# 正确写法:保留完整键值对的排序
sortedPairs := myCollection sorted: [:pair1 :pair2 | pair1 key < pair2 key].
"返回结果:OrderedCollection(#apple->3, #banana->5, #cherry->7)"

额外说明

  • 如果你想直接修改原集合而不是生成新集合,用sort:方法(注意没有末尾的ed):
    myCollection sort: [:pair1 :pair2 | pair1 key < pair2 key].
    "现在myCollection本身已经是排序后的完整键值对集合了"
    
  • 如果你的键值对不是标准的Association,而是自定义对象,只需要把pair key换成你对象里获取键的方法就行(比如如果你的对象有#itemKey方法,就写pair1 itemKey < pair2 itemKey)。

这样就能得到按键排序后的完整键值对集合啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:57:02