Подтвердить что ты не робот

Как получить первую пару ключей и значений из хэш-таблицы в Ruby

Я пытаюсь получить первый ключ и ключ значения из хеш-таблицы в 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 вместо нуля... И я надеялся, что лучший способ получить первую пару ключей/значений хеш-таблицы вместо создания новой хеш-таблицы с ключом и значением, полученным из предыдущей таблицы.

4b9b3361

Ответ 1

Вы можете просто сделать

key, value = hash.first

или если вы предпочитаете:

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

Тогда возможно:

new_hash = {key => value}

Ответ 2

Существует более короткий ответ, который не требует использования дополнительных переменных:

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}

Ответ 3

Мне кажется, вам все равно нужно сначала прочитать основы рубинов. В любом случае, это ответ и ссылки на основы рубина.

h = { "a" => 100, "b" => 200 }
h.each {|key, value| puts "#{key} is #{value}" }
produces:
a is 100
b is 200


h.each_key{|key| puts "key is #{key} "
produces:
key is a
key is b

h.each_value{|value| puts "value is #{value} "
produces:
value is 100
value is 200

Здесь в приведенном выше ответе мы используем each, every_key, each_value, чтобы получить значения из хэша. каждый даст вам каждый ключ, значение. Каждый_key даст вам каждый ключ. each_value даст вам каждое значение.

Вот ссылки на основы рубина.

http://ruby-doc.org/core-1.9.2/Hash.html

Основы Ruby