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

