68

ruby のハッシュ テーブルから最初のキーと値のキーを取得しようとしています。メソッドに渡されるため、ハッシュのキー値はわかりません。最初のキー/値を別のハッシュテーブルとして見つける方法をオンラインで見つけることができません。コードを実行するとhash[0]返される名前が 0 の要素を見つけようとするだけだと思います。nil

キーの名前と値を見つけて、それらから新しいハッシュを作成できることはわかっていますが、これを行う簡単な方法があるのではないかと思うので、すぐにハッシュを取得します。

ここに私のコードがあります:

def rps_game_winner(game)

rock_in_hash = game.invert['R']
paper_in_hash = game.invert['P']
scissors_in_hash = game.invert['S']

if(rock_in_hash)
      if(paper_in_hash)
        return paper_in_hash;
      elsif(scissors_in_hash)
        return rock_in_hash
      end
    elsif(paper_in_hash)
      if(rock_in_hash)
        return paper_in_hash
      elsif(scissors_in_hash)
        return scissors_in_hash
      end
    end
        key = game.keys[-1]
        value = game.values[-1]
            winner = {key => value}
    return winner 
    end

game_one = { "Bob" => 'P', "Jim" => 'P' }

puts rps_game_winner(game_one)

これにより、正しい結果が得られます。問題は、ゼロではなく-1である理由がわからないことです...そして、新しいハッシュを作成する代わりに、ハッシュテーブルの最初のキーと値のペアを取得するより良い方法があることを望んでいました前のテーブルから取得したキーと値を持つテーブル。

4

4 に答える 4

181

あなたはただすることができます

key, value = hash.first

または、必要に応じて:

key = hash.keys[0]
value = hash.values[0]

次に多分:

new_hash = {key => value}
于 2012-10-14T09:21:49.560 に答える
48

追加の変数を使用する必要のない短い答えがあります。

h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500}
Hash[*h.first] #=> {"a" => 100}

または、任意の単一の位置でキー/値を取得する場合

Hash[*h.to_a.at(1)] #=> {"b" => 200}

または、位置の範囲からキー/値を取得します

 Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400}
于 2014-01-12T04:38:14.143 に答える
1
my_hash = { "a" => "first", "b" => "second" }

{ my_hash.keys.first => my_hash.values.first }

これも効く

于 2021-10-02T05:24:34.700 に答える