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

Ruby中哈希数组(Array of Hashes)的状态统计与目标结构生成求助

Ruby: 按Interface统计主机在线/离线状态并生成指定汇总结构

你已经找对了核心的统计思路,只需要调整统计时的键名,并把最终的哈希结构转换为数组即可匹配预期输出。这里是完整的实现代码:

aoh = [{:interface=>"1A", :host=>"host_1", :status=>"online"}, {:interface=>"1A", :host=>"host_2", :status=>"online"}, {:interface=>"1A", :host=>"host_3", :status=>"offline"}, {:interface=>"2A", :host=>"host_4", :status=>"offline"}, {:interface=>"2A", :host=>"host_5", :status=>"offline"}, {:interface=>"2A", :host=>"host_6", :status=>"online"} ]

# 初始化统计哈希,直接使用预期的键名
summary_hash = Hash.new { |h, k| h[k] = { online_hosts: 0, offline_hosts: 0 } }

# 遍历原始数组,累加对应状态的计数
aoh.each do |item|
  status_key = item[:status] == 'online' ? :online_hosts : :offline_hosts
  summary_hash[item[:interface]][status_key] += 1
end

# 将统计哈希转换为预期的数组结构
summary = summary_hash.map do |interface, counts|
  { interface: interface }.merge(counts)
end

p summary
# 输出结果完全匹配预期:
# [{:interface=>"1A", :online_hosts=>2, :offline_hosts=>1}, {:interface=>"2A", :online_hosts=>1, :offline_hosts=>2}]

关键调整说明:

  • 修正统计键名:初始化哈希时直接用online_hosts和offline_hosts作为键,避免后续再修改键名的额外操作。
  • 转换为数组结构:利用Hash#map方法,把统计哈希的每个键值对(键是interface字符串,值是计数哈希)转换成包含interface键的子哈希,再合并计数数据,最终得到预期的数组格式。

如果你想更紧凑地实现,也可以把统计和转换合并成一步,但上面的写法更直观,便于理解和维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:17:32