@ dictionary = {"cat"=>"Sam"}
Это возвращение ключRuby как вернуть элемент словаря?
@dictionary.key(x)
Это возвращает значение
@dictionary[x]
Как вернуть весь элемент "кот" => "Сэм"
@ dictionary = {"cat"=>"Sam"}
Это возвращение ключRuby как вернуть элемент словаря?
@dictionary.key(x)
Это возвращает значение
@dictionary[x]
Как вернуть весь элемент "кот" => "Сэм"
@dictionary
должен сделать трюк для вас
Каково бы ни было последнее оцениваемое выражение в ruby, является возвращаемым значением метода. Если вы хотите вернуть хеш в целом. последняя строка метода должна выглядеть как строка, которую я написал выше
@dictionary вернет весь словарь? Я просто хочу вернуть 1 элемент – user1854438
, вы не понимаете его sir, '@dictionary = {" cat "=>" Sam "}' line означает, что существует переменная экземпляра, называемая '@ dictionary', которая является хешем и имеет значение '{ "кот"=> "Сэм"}' – aelor
Если вы хотите вернуть один элемент хэша h
, вам нужно будет указать ключ для идентификации элемента. Поскольку значение для ключа k
равно h[k]
, пара ключ-значение, выраженная в виде массива, равна [k, h[k]]
. Если вы хотите сделать хэш с одним элементом, используйте Hash[[[k, h[k]]]]
.
Например, если
h = { "cat"=>"Sam", "dog"=>"Diva" }
и вы хотели только к элементу с ключом "cat"
, который был бы
["cat", h["cat"]] #=> ["cat", "Sam"]
или
Hash[[["cat", h["cat"]]]] #=> {"cat"=>"Sam"}
С Рубином 2.1 вы могли бы в качестве альтернативы получить хэш вот так:
[["cat", h["cat"]]].to_h #=> {"cat"=>"Sam"}
Давайте посмотрим на более интересный случай. Предположим, у вас есть массив arr
, содержащий некоторые или все ключи хеша h
. Тогда вы можете получить все пары ключ-значение для этих ключей с помощью методов Enumerable#zip и Hash#values_at:
arr.zip(arr.values_at(*arr))
Предположим, например,
h = { "cat"=>"Sam", "dog"=>"Diva", "pig"=>"Petunia", "owl"=>"Einstein" }
и
arr = ["dog", "owl"]
Тогда:
arr.zip(h.values_at(*arr))
#=> [["dog", "Diva"], ["owl", "Einstein"]]
На этапах:
a = h.values_at(*arr)
#=> h.values_at(*["dog", "owl"])
#=> h.values_at("dog", "owl")
#=> ["Diva", "Einstein"]
arr.zip(a)
#=> [["dog", "Diva"], ["owl", "Einstein"]]
Чтобы вместо выразить как хэш:
Hash[arr.zip(h.values_at(*arr))]
#=> {"dog"=>"Diva", "owl"=>"Einstein"}
Ваш пример немного в заблуждение в том смысле, что имеет только одну пару (хотя и не обязательно) (?) , и вы хотите получить одну пару.То, что вы называете «словарем», на самом деле является хэшмапом (так называемый хэш среди рубистов).
A hashrocket (=>
) является частью синтаксиса определения хэша. Его нельзя использовать вне его. То есть вы не можете получить только одну пару без создания нового хэша. Итак, новая такая пара будет выглядеть так: { key => value }
.
Так что для этого вам понадобится ключ и значение в контексте вашего кода. И вы указали способы получить оба, если у вас есть. Если у вас есть только значение, то:
{ @dictionary.key(x) => x }
... и если только ключ, а затем:
{ x => @dictionary[x] }
... но нет никакой практической необходимости в этом. Если вы хотите обработать каждую пару в хэш, использовать итератор кормить каждую пару в некоторый код, как список аргументов:
@dictionary.each do |key, value|
# do stuff with key and value
end
Таким образом, блок кода получите каждую пару в хэш раз.
Если вы хотите получить не хэш, а пары элементов он построен из, вы можете преобразовать ваш хэш в массив:
@dictionary.to_a
# => [["cat", "Sam"]]
# Note the double braces! And see below.
# Let's say we have this:
@dictionary2 = { 1 => 2, 3 => 4}
@dictionary2[1]
# => 2
@dictionary2.to_a
# => [[1, 2], [3, 4]]
# Now double braces make sense, huh?
Он возвращает массив пар (которые являются массивами, а) всех элементов (ключей и значений), которые содержит ваш хэш.
Вы можете получить ключ и значение в один раз - в результате в массиве:
@h = {"cat"=>"Sam", "dog"=>"Phil"}
key, value = p h.assoc("cat") # => ["cat", "Sam"]
Использование rassoc
для поиска по значению (.rassoc("Sam")
)
Мы называем это Hash в Ruby, не словарь , –
'' cat "=>« Сэм »- это пара, т. Е. Два элемента« cat »и« Sam ». Он не может быть возвращен как отдельный объект. – Stefan