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

Ruby哈希数组取值:如何将扑克牌手牌存入独立变量

问题:将每手牌存入独立变量Hand1、Hand2等?

代码示例

@hands = [
  [{"suit": "heart", "value": 5},{"suit": "heart", "value": 8},{"suit": "spade", "value": 1},{"suit": "club", "value": 5},{"suit": "diamond", "value": 5}],
  [{"suit": "club", "value": 1},{"suit": "club", "value": 3},{"suit": "club", "value": 8},{"suit": "club", "value": 9},{"suit": "club", "value": 11}],
  [{"suit": "diamond", "value": 2},{"suit": "heart", "value": 2},{"suit": "spade", "value": 2},{"suit": "club", "value": 6},{"suit": "diamond", "value": 12}],
  [{"suit": "club", "value": 2},{"suit": "heart", "value": 3},{"suit": "spade", "value": 5},{"suit": "club", "value": 4},{"suit": "diamond", "value": 1}]
]

def get_hands
  @hands.each do |hand|
    hand.each do |card|
      print "#{card.fetch(:suit).chars[0]}" + "#{card.fetch(:value)}"
    end
  end
end

get_hands方法的输出为:

h5h8s1c5d5c1c3c8c9c11d2h2s2c6d12c2h3s5c4d1

作为Ruby初学者,我尝试多种方法后仍困惑,现请教:能否从每个hand哈希中提取值,将每手牌的5张牌分别存入Hand1、Hand2这类独立变量中?


解决方案

当然可以,有几种实用方法实现这个需求:

1. 手动赋值(适合固定数量的手牌)

如果@hands的长度是固定的(比如当前是4组),直接按索引提取赋值即可:

hand1 = @hands[0]
hand2 = @hands[1]
hand3 = @hands[2]
hand4 = @hands[3]

赋值后,hand1就对应第一组5张牌的数组,直接调用就能查看完整手牌数据。

2. 动态创建变量(适合手牌数量不固定的场景)

如果手牌数量不确定,想自动生成hand1、hand2这类变量,可以用Ruby的instance_variable_set方法:

@hands.each_with_index do |hand, index|
  instance_variable_set("@hand#{index + 1}", hand)
end

执行这段代码后,你就能直接使用@hand1、@hand2、@hand3、@hand4这些实例变量,每个变量对应一组手牌。

额外提示

  • Ruby中变量名区分大小写,惯例是用小写开头的变量(如hand1),大写开头通常用于类名,建议遵循这个规范。
  • 如果只是临时访问手牌,直接通过@hands[0]、@hands[1]这类索引访问也很方便,单独赋值主要是为了提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:10:26