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

如何按卡牌ID对hand列表中的Card对象进行升序排序

手牌按卡牌ID升序排序实现方法

已知条件

  • 待排序的hand是固定包含8个卡牌对象的无序列表
  • 可通过hand[索引].GetCardId()方法获取对应位置卡牌的ID,ID取值范围为1-52
  • 排序要求:排序后列表索引0位置为ID最小的卡牌,索引7(最后一位)位置为ID最大的卡牌

实现逻辑

手牌仅8个元素,数据量极小,用实现成本最低的比较类排序即可满足需求,不需要复杂算法优化。

  • 首先确认列表访问能力:示例中给出了hand[0].GetCardId()的访问方式,说明列表支持0-7全索引访问,所有位置的卡牌ID都可以通过相同方式获取。
  • 采用冒泡排序实现(代码量低,逻辑直白,该数据量下无性能问题):
    • 外层共执行7轮遍历,每一轮都会把当前未排序区间里ID最大的牌“移”到区间末尾
    • 内层遍历当前未排序的相邻卡牌,比较二者ID,若前一张ID大于后一张则交换两个卡牌在列表中的位置
    • 全部遍历完成后列表自然呈ID升序排列,首尾分别为最小、最大ID的卡牌。

代码参考(通用伪代码)

// 固定8张牌的场景可直接写死长度,用长度变量适配性更好
const HAND_SIZE = 8
for i from 0 to HAND_SIZE - 2:
    for j from 0 to HAND_SIZE - 2 - i:
        cardIdA = hand[j].GetCardId()
        cardIdB = hand[j+1].GetCardId()
        if cardIdA > cardIdB:
            // 交换两张牌的位置
            tempCard = hand[j]
            hand[j] = hand[j+1]
            hand[j+1] = tempCard

如果你使用的编程语言自带列表排序API,直接自定义排序规则为按GetCardId()返回值升序即可,代码更简洁,例如JS/TS等语言可直接写:

hand.sort((cardA, cardB) => cardA.GetCardId() - cardB.GetCardId())

执行后直接得到符合要求的有序手牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:54:29