Ответ 1
Вы можете просто сделать
key, value = hash.first
или если вы предпочитаете:
key = hash.keys[0]
value = hash.values[0]
Тогда возможно:
new_hash = {key => value}
Я пытаюсь получить первый ключ и ключ значения из хеш-таблицы в 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 вместо нуля... И я надеялся, что лучший способ получить первую пару ключей/значений хеш-таблицы вместо создания новой хеш-таблицы с ключом и значением, полученным из предыдущей таблицы.
Вы можете просто сделать
key, value = hash.first
или если вы предпочитаете:
key = hash.keys[0]
value = hash.values[0]
Тогда возможно:
new_hash = {key => value}
Существует более короткий ответ, который не требует использования дополнительных переменных:
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}
Мне кажется, вам все равно нужно сначала прочитать основы рубинов. В любом случае, это ответ и ссылки на основы рубина.
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 даст вам каждое значение.
Вот ссылки на основы рубина.