0

更新: 答えは私の下にあり、単純な .merge が必要でした。

build_virtual_boards_hash メソッドからの出力としてハッシュのハッシュを取得する必要があります。ハッシュをハッシュのスタックに追加する方法がわかりません。または、そのようなものを作成する方法も...最初にメソッドをリストしてから、取得している出力を示します。

使用される 2 つの方法は次のとおりです...問題は「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

現在、これら2つの方法からこの出力を取得しています...

{"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

2 に答える 2

4

通常、ハッシュのハッシュに関する問題は、ディープ ハッシュを初期化する方法です。

この問題はすでに解決されており、Ruby Facetsに入れられています。

h = Hash.autonew

これで、次の方法でハッシュを簡単に初期化できます。

h[:h1][:key] = 'value'
h[:h2][:key] = 'value'
...
于 2012-12-09T20:41:47.327 に答える
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
于 2012-12-10T03:53:57.927 に答える