2012-12-09 53 views
1

更新:下面的答案是由我簡單.merge是需要的。如何在紅寶石中創建散列哈希

我需要散列散列作爲我的build_virtual_boards_hash方法的輸出 我無法弄清楚如何將散列添加到一堆散列。或者甚至如何創建這樣的事情......首先,我將列出方法,然後顯示我得到的輸出。

這裏是用來...問題所在「build_virtual_boards_hash」中的兩個方法...

def build_virtual_boards_hash(board, player) 
    virtual_board = board.dup 

    virtual_board_hash = {} 
    new_board_hash = {} 

    empty_spaces_on_board = virtual_board.grid.select{ |k, v| v == " " }.keys 
    index_mark = 'VB'+empty_spaces_on_board.length.to_s 

    #THIS IS WHERE I THINK THE PROBLEM IS 
    #HOW DO I ADD EACH LOOP RESULT TO -SOMETHING- 
    #THAT CAN BE CALLED ON LATER AFTER THE LOOP ENDS 
    #SO I GET THE DESIRED RESULTING OUTPUT? 
    # 
    empty_spaces_on_board.each do |empty_space_symbol| 
    # create a hash 
    new_board_hash = {index_mark => move_as_somebody(board, player, empty_space_symbol).grid} #value 
    p new_board_hash 
    end 

end 


#takes board....returns new board 
def move_as_somebody(board, player, empty_space) 
    new_board = board 
    if player == 'X' 
    new_board.grid[empty_space] = player 
    else 
    player == 'O' 
    new_board.grid[empty_space] = player 
    end 
    return new_board 
end 

我目前得到這兩種方法這個輸出...

{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>" ", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>" ", :c2=>" ", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>" ", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>"X", :c3=>" "}} 
{"VB7"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>"X", :c3=>"X"}} 

我需要的是什麼...

virtual_boards = { 
    {"VB7"=>{:a1=>"X", :a2=>"X", :a3=>" ", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}}, 
    {"VB6"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>" ", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}}, 
    {"VB5"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "}}, 
    {"VB4"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>" ", :c2=>" ", :c3=>" "}}, 
    {"VB3"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>" ", :c3=>" "}}, 
    {"VB2"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>"X", :c3=>" "}}, 
    {"VB1"=>{:a1=>"X", :a2=>"X", :a3=>"X", :b1=>"X", :b2=>"O", :b3=>"X", :c1=>"X", :c2=>"X", :c3=>"X"}} 
} 

如何做到這一點?

+4

這不是一個有效的散列。你想要一個數組嗎? –

+0

這是一個功課問題嗎? –

+0

不,它不是一個家庭作業問題...我只是一個小菜單 – babykosh

回答

4

散列哈希的問題通常是如何初始化深度哈希。

此問題已得到解決已經並投入Ruby Facetes

h = Hash.autonew 

現在你可以很容易初始化哈希以這種方式:

h[:h1][:key] = 'value' 
h[:h2][:key] = 'value' 
... 
+1

或者避開另一個庫並初始化哈希: 'hash = Hash.new {| h,k | h [k] = Hash.new(&h.default_proc)}' – davidcelis

+0

@davidcelis所以我真的把它放在這裏?你是說這個virtual_board_hash = {index_mark.to_sym => new_board_hash} ...變成了這個...... virtual_board_hash = Hash.new {| h,k | h [k] = Hash.new(&h.default_proc)} – babykosh

+0

抱歉的孩子們......這不是答案。 – babykosh

1

,答案是....

#builds hash of hash of fake boards 
def build_virtual_boards_hash(board, player) 
    virtual_board = board.dup 
    i = 0 
    virtual_board_hash = {} 
    new_board_hash = {} 

    empty_spaces_on_board = virtual_board.grid.select{ |k, v| v == " " }.keys 


    while i < empty_spaces_on_board.length do 
    p empty_space_symbol = empty_spaces_on_board[i] 
    p index_mark = 'VB'+i.to_s 

    new_board_hash = {index_mark => move_as_somebody(board, player, empty_space_symbol).grid} 

    virtual_board_hash = virtual_board_hash.merge(new_board_hash)   

    i += 1 
    end 
    p virtual_board_hash 
end