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

用于存储斯诺克比赛记分板的高效数据结构选型咨询

推荐的高效数据结构方案

针对你这个斯诺克选手月度赛事的记分存储需求,我推荐两种高效且贴合场景的数据结构,日常维护和查询都很顺手:

1. 哈希表(字典)嵌套结构

这是最直接且高效的方案,尤其适合快速查询和更新单条记录。核心思路是用选手名字作为外层哈希表的键,对应的值是一个子字典,存储该选手的总胜场、总负场,甚至可以细化到和每个对手的交手胜负记录。

比如用Python实现的示例:

# 基于现有6场比赛初始化的记分字典
player_records = {
    "Cobra": {"wins": 2, "losses": 0, "head_to_head": {"DODO": 1, "John": 1}},
    "DODO": {"wins": 1, "losses": 1, "head_to_head": {"Cobra": 0, "Funter": 1}},
    "John": {"wins": 1, "losses": 1, "head_to_head": {"DON": 1, "Cobra": 0}},
    "DON": {"wins": 1, "losses": 1, "head_to_head": {"John": 0, "Swimmer": 1}},
    "Swimmer": {"wins": 1, "losses": 1, "head_to_head": {"Funter": 1, "DON": 0}},
    "Funter": {"wins": 0, "losses": 2, "head_to_head": {"Swimmer": 0, "DODO": 0}}
}

优势:

  • 查询/更新效率高:哈希表的操作时间复杂度是O(1),不管选手数量多少,找某个人的记录或者更新胜负都能瞬间完成。
  • 结构直观:一眼就能看到每个选手的总战绩,以及和特定对手的交手情况,适合月度赛事这种需要快速核对记录的场景。
  • 易扩展:如果后续要加额外统计项(比如单局最高分),直接在子字典里加字段就行。

2. 面向对象的类结构

如果你的赛事系统需要长期维护、扩展功能(比如计算胜率、生成排名报表),面向对象的方案会更清晰,把选手的属性和操作封装在一起。

比如用Python实现的Player类:

class SnookerPlayer:
    def __init__(self, name):
        self.name = name
        self.total_wins = 0
        self.total_losses = 0
        # 存储和每个对手的交手胜场数
        self.vs_opponents = {}

    def add_win(self, opponent_name):
        self.total_wins += 1
        # 更新对该对手的胜场记录
        self.vs_opponents[opponent_name] = self.vs_opponents.get(opponent_name, 0) + 1

    def add_loss(self, opponent_name):
        self.total_losses += 1
        # 如果需要记录输给对手的次数,也可以在这里添加对应逻辑

# 初始化所有选手
player_list = {
    "Cobra": SnookerPlayer("Cobra"),
    "DODO": SnookerPlayer("DODO"),
    "John": SnookerPlayer("John"),
    "DON": SnookerPlayer("DON"),
    "Swimmer": SnookerPlayer("Swimmer"),
    "Funter": SnookerPlayer("Funter")
}

# 记录已完成的比赛
player_list["Cobra"].add_win("DODO")
player_list["DODO"].add_loss("Cobra")
player_list["John"].add_win("DON")
player_list["DON"].add_loss("John")
# 剩下的4场比赛同理依次记录

优势:

  • 逻辑封装性好:所有和选手记录相关的操作(加胜场、加负场)都在类里实现,后续修改规则(比如胜场算2分)只需要改类里的方法,不用到处找代码。
  • 易扩展功能:比如要给选手加胜率计算,直接在类里加一个calculate_win_rate()方法就行;要生成排名,直接对player_list.values()按total_wins排序。

额外小建议

  • 如果需要按胜场/胜率排序,哈希表方案可以把字典转成列表后排序(比如sorted(player_records.items(), key=lambda x: x[1]['wins'], reverse=True));类方案直接对选手实例排序即可。
  • 如果需要持久化存储(比如每月结束后存档),两种方案都可以序列化为JSON文件,或者存入轻量数据库(比如SQLite),方便后续读取和统计。

内容的提问来源于stack exchange,提问作者OCT-DEVELOPERS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:30:53