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

Ruby中仅已知哈希value如何获取对应key,调用.key方法报未定义错误怎么解决

问题排查与修复

错误根源

  • 你调用sort_by方法处理words哈希后,返回的highest是嵌套数组,结构为[[单词1, 得分1], [单词2, 得分2], ...],并不是哈希类型。只有哈希对象才有.key()方法,数组不存在该方法,所以触发了未定义方法错误。
  • 你后续写的范围循环逻辑是冗余的,且第一次循环就会触发return,不会执行后续判断,完全达不到遍历对比的效果。

修复方案

你要获取得分最高且首次出现的单词,直接用Hash#max_by方法即可,该方法会在多个元素同值时自动返回最先出现的元素,完全符合你的需求。

修正后的完整代码

def high(x)
  # 优化字母得分哈希的生成逻辑,更简洁
  alphabet = ('a'..'z').each_with_index.to_h.transform_values { |v| v + 1 }
  words = Hash.new(0)

  x.split(" ").each do |word|
    count_a = 0
    word.each_char do |chars|
      count_a += alphabet[chars] if alphabet.key?(chars)
    end
    words[word] = count_a
  end

  # 直接取最高得分的第一个单词
  words.max_by { |_, score| score }[0]
end

如果你要保留原来的sort_by写法

sort_by默认按得分升序排列,最高得分的元素在数组末尾,直接取末尾元素的第一个值即可,不需要额外循环:

highest = words.sort_by { |key, value| value }
return highest[-1][0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:04