带有哈希数组的数组会破坏ruby中的代码

带有哈希数组的数组会破坏ruby中的代码,ruby,arrays,multidimensional-array,hash,Ruby,Arrays,Multidimensional Array,Hash,我是新来的ruby,正在做终端游戏。 我有一副牌 deck_of_cards =[ {:card=>"2C",:value=>2}, {:card=>"3C",:value=>3}, {:card=>"4C",:value=>4}, {:card=>"5C",:value=>5}, {:card=>"6C",:value=>6}, {:card=>"7C",:value=>7}, {:card=>"8C",:value

我是新来的ruby,正在做终端游戏。 我有一副牌

deck_of_cards =[ {:card=>"2C",:value=>2}, {:card=>"3C",:value=>3}, {:card=>"4C",:value=>4}, {:card=>"5C",:value=>5}, {:card=>"6C",:value=>6}, {:card=>"7C",:value=>7}, {:card=>"8C",:value=>8}, {:card=>"9C",:value=>9}, {:card=>"10C",:value=>10}, {:card=>"JC",:value=>11}, {:card=>"QC",:value=>12}, {:card=>"KC",:value=>13}, {:card=>"AC",:value=>14},
             {:card=>"2D",:value=>2}, {:card=>"3D",:value=>3}, {:card=>"4D",:value=>4}, {:card=>"5D",:value=>5}, {:card=>"6D",:value=>6}, {:card=>"7D",:value=>7}, {:card=>"8D",:value=>8}, {:card=>"9D",:value=>9}, {:card=>"10D",:value=>10}, {:card=>"JD",:value=>11}, {:card=>"QD",:value=>12}, {:card=>"KD",:value=>13}, {:card=>"AD",:value=>14},
             {:card=>"2H",:value=>2}, {:card=>"3H",:value=>3}, {:card=>"4H",:value=>4}, {:card=>"5H",:value=>5}, {:card=>"6H",:value=>6}, {:card=>"7H",:value=>7}, {:card=>"8H",:value=>8}, {:card=>"9H",:value=>9}, {:card=>"10H",:value=>10}, {:card=>"JH",:value=>11}, {:card=>"QH",:value=>12}, {:card=>"KH",:value=>13}, {:card=>"AH",:value=>14},
             {:card=>"2S",:value=>2}, {:card=>"3S",:value=>3}, {:card=>"4S",:value=>4}, {:card=>"5S",:value=>5}, {:card=>"6S",:value=>6}, {:card=>"7S",:value=>7}, {:card=>"8S",:value=>8}, {:card=>"9S",:value=>9}, {:card=>"10S",:value=>10}, {:card=>"JS",:value=>11}, {:card=>"QS",:value=>12}, {:card=>"KS",:value=>13}, {:card=>"AS",:value=>14}]
然后我洗牌一副牌,通过.slice向玩家1=[]和玩家2=[]发牌

我的问题是在我运行逻辑测试之后

until player1 == [] || player2 == []
    player1_battle = []
    player2_battle = []
    player1_battle_value = []
    player2_battle_value = []
    puts player1.slice(0).class
    puts player2.slice(0).class
    player1_battle << player1.slice!(0)
    player2_battle << player2.slice!(0)
    puts player1_battle.class
    puts player2_battle.class

    player1_battle_value << player1_battle.map{|h| h[:value].to_i}
    player2_battle_value << player2_battle.map{|h| h[:value].to_i}
    puts "Dealer draws #{player1_battle}" #shows each players card on the table
    puts "You draw #{player2_battle}" #takes top card out of player array
    puts player1_battle_value
    puts player2_battle_value
    puts player1_battle_value <=> player2_battle_value
    battle_value = player1_battle_value <=> player2_battle_value
    puts battle_value
     if battle_value == 1
      player1 << player1_battle
      player1 << player2_battle
      puts "Dealer Wins!"
第一个索引现在是.map方法分解成的带有散列的数组

:in `[]': can't convert Symbol into Integer (TypeError)
from terminal_war.rb:65:in `block in <main>'
from terminal_war.rb:65:in `map'
from terminal_war.rb:65:in `<main>'
:在“[]”中:无法将符号转换为整数(TypeError)
来自terminal_war.rb:65:in'block in'
来自terminal_war.rb:65:in'map'
从战争终点站开始。rb:65:in`'
我知道我的代码不是很好,但是有没有更好的方法来对照:卡测试:的值,并防止代码在循环24-26次后中断?一旦数组中的所有散列都变成带有散列的数组,代码就会中断

我希望我提供了足够的信息,谢谢

您不应该使用
concat

player1_battle_value.concat(player1_battle.map{|h| h[:value].to_i})

你应该显示你的代码的其余部分。我把代码放在一个摘要中,谢谢你看这个问题!谢谢您的回答,但我更改了它,错误是相同的
[]:无法将符号转换为整数(TypeError)来自terminal_-war.rb:65:in
block in'来自terminal_-war.rb:65:in
map'来自terminal_-war.rb:65:in
'一旦我的散列数组成为散列数组,它就会破坏经过编辑的player_1数组,以显示带有散列的数组。很抱歉给您带来任何困惑,这是我的第一篇帖子:)@sierra2:您是否更改了其他类似的参考资料?您的问题来自更改数据结构。通过使用正确的运算符和函数,保持数据结构的应有状态。我正在进行这方面的工作。我是新手,我需要对正确的函数和运算符做更多的研究。非常感谢。
:in `[]': can't convert Symbol into Integer (TypeError)
from terminal_war.rb:65:in `block in <main>'
from terminal_war.rb:65:in `map'
from terminal_war.rb:65:in `<main>'
player1_battle_value << player1_battle.map{|h| h[:value].to_i}
[{:card=>"KD", :value=>13}, [{:card=>"AC", :value=>14}], [{:card=>"4S", :value=>4}]]
player1_battle_value.concat(player1_battle.map{|h| h[:value].to_i})