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

Ruby:从数组生成哈希表无效,为何未添加内容?

问题分析与解决

你的代码存在两个核心问题:

1. 哈希默认值的创建逻辑错误

Hash.new(Array.new)会生成一个全局共享的默认数组实例——所有未定义的哈希键都会指向同一个数组。更关键的是:当你调用words[xxx].append(word)时,只是修改了这个共享的默认数组,但并没有把数组与对应键xxx绑定到哈希中,所以哈希本身始终是空的。

2. 数组修改未触发哈希键值对的添加

即便不用共享数组,直接修改默认返回的数组也不会自动把键加入哈希,因为words[word.chars.sort]在键不存在时只是返回默认值,修改这个值不会触发哈希的键值对创建操作。


修正后的代码
words = Hash.new { |hash, key| hash[key] = [] }
word_list.each do |word|
  key = word.chars.sort
  words[key] << word
end

修正点说明

  • 使用块形式的Hash.new:每次访问不存在的键时,块会执行并创建一个新的空数组,同时把这个数组赋值给该键,确保每个键都有独立的数组,且键会被自动添加到哈希中。
  • 用<<替代append:两者功能一致,但Ruby社区更常用<<来向数组添加元素,可读性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:02