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

