0

だから私はハッシュのハッシュを持っています....

 @win_moves = {
    :wm01 => {:a1=>"X", :a2=>" ", :a3=>" ", :b1=>" ", :b2=>"X", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>"X"},
    :wm02 => {:a1=>" ", :a2=>"X", :a3=>" ", :b1=>" ", :b2=>"X", :b3=>" ", :c1=>" ", :c2=>"X", :c3=>" "},
    :wm03 => {:a1=>" ", :a2=>" ", :a3=>"X", :b1=>" ", :b2=>"X", :b3=>" ", :c1=>"X", :c2=>" ", :c3=>" "},
    :wm04 => {:a1=>" ", :a2=>" ", :a3=>" ", :b1=>"X", :b2=>"X", :b3=>"X", :c1=>" ", :c2=>" ", :c3=>" "},
    :wm05 => {:a1=>"X", :a2=>"X", :a3=>"X", :b1=>" ", :b2=>" ", :b3=>" ", :c1=>" ", :c2=>" ", :c3=>" "},
    :wm06 => {:a1=>" ", :a2=>" ", :a3=>" ", :b1=>" ", :b2=>" ", :b3=>" ", :c1=>"X", :c2=>"X", :c3=>"X"}
  }

そして、私はそのようなハッシュを取りたい..

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

X 値の以前のハッシュ @win_moves と比較して、@win_moves[0] (この場合の答え) で正の一致が得られるようにします... X の存在を確認する必要があります。

正しい方向に私を向けることができますか?

4

3 に答える 3

0

以下は、@thegrid として一致する X を持つ @win_moves 内のすべてのキーを検索します。

keys_with_x = @thegrid.select{ |k, v| v == "X" }.keys
matching_moves = @win_moves.select{ |k, v| v.select{ |k, v| v == "X" }.keys == keys_with_x }
puts matching_moves.keys
#=> wm01
于 2012-08-13T18:43:28.277 に答える
0

@thegrid ハッシュを破壊することを気にしない場合は、次のことができます。

@winmoves.has_value? @thegrid.each { |k, v| thegrid[k] = " " if v == "O" }

winmoves のいずれかのキーが一致すると、true が返されます。非破壊的に行う必要がある場合は、次のようにします。

a_new_hash = @thegrid.inject({}) { |h, (k, v)| h[k] = " " if v == "O"; h }
@winmoves.has_value? a_new_hash
于 2012-08-13T18:43:34.203 に答える
0

私はあなたがそれを行うことができると思います:

@win_moves.any?{|k,v| v.reject{|a,b| b != 'X'} == @thegrid.reject{|c,d| d!= 'X'}}
于 2012-08-13T18:50:07.273 に答える