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

Ruby实现密码管理器:添加哈希键值前校验键值唯一性

Ruby密码管理器添加功能实现方案

你现有代码存在多余end的语法问题,先修正类结构后,在add方法的赋值语句前补两层唯一性校验即可满足需求,两个校验点对应你要的两个唯一性规则:

  • 服务名唯一:你当前用Hash的键存储服务名,Hash原生的键是唯一的,但直接赋值会覆盖旧值,所以必须提前判断键是否已存在,避免覆盖原有记录
  • 密码唯一:需要检查Hash中所有已存储的密码值,确认当前传入的密码没有被其他服务占用

具体实现逻辑

两个校验任意一个不通过就拦截添加操作,你可以根据练习要求选择抛出参数错误、返回失败提示/布尔值,全部校验通过后再执行存入操作。
修正后的完整代码:

class PasswordManager
  def initialize
    @passwords = {}
  end

  def add(service, password)
    # 校验服务名是否重复
    if @passwords.key?(service)
      raise ArgumentError, "服务名已存在,请勿重复添加"
    end

    # 校验密码是否重复
    if @passwords.value?(password)
      raise ArgumentError, "密码已被其他服务使用,请更换唯一密码"
    end

    # 校验通过后完成存入
    @passwords[service] = password
  end

  def services
    @passwords.keys 
  end
end

如果你的练习场景不需要抛错,也可以把raise部分替换成返回提示字符串或者布尔值,比如校验失败返回false,添加成功返回true,适配上层调用逻辑即可。

小提示:Ruby Hash自带的key?()方法用于快速判断指定键是否存在,value?()方法用于判断指定值是否在当前Hash的值集合中,对于入门练习的小规模数据场景,这两个方法的性能完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:18:20