Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
a.fetch("pointed") # IndexError
a.fetch("curved","na") # 2
a.fetch("x","na") # "na"
a.fetch("flat") {|x| x.upcase} # 3
a.fetch("pointed") {|x| x.upcase) # "POINTED"
8.2.3. Доступ к парам ключ-значение и добавление новых пар
В классе
Hash
[]
[]=
Array
а = {}
а["flat"] = 3 # {"flat"=>3}
а.[]=("curved",2) # {"flat"=>3,"curved"=>2}
a.store("angled",5) # {"flat"=>3,"curved"=>2,"angled"=>5}
Метод
store
[]=
Метод
fetch
[]
IndexError
a["flat"] # 3
а.[]("flat") # 3
a.fetch("flat") # 3
a["bent"] # nil
Предположим, что мы не уверены, существует ли объект
Hash
unless defined? а
а={}
end
a["flat"] = 3
Но есть и другой способ:
а ||= {}
a["flat"] = 3
# Или даже так:
(а ||= {})["flat"] = 3
Тот же вопрос можно поставить для отдельных ключей, когда новое значение следует присваивать, лишь если такого ключа еще нет:
a=Hash.new(99)
а[2] # 99
а # {}
а[2] ||= 5 # 99
а # {}
b=Hash.new
b # {}
b[2] # nil
b[2] ||= 5 # 5
b # {2=>5}
Отметим, что nil может выступать и в качестве ключа, и в качестве значения:
b={}
b[2] # nil b[3]=nil
b # {3=>nil}
b[2].nil? # true
b[3].nil? # true b[nil]=5
b # {3=>nil,nil=>5}
b[nil] # 5
b[b[3]] # 5
8.2.4. Удаление пар ключ-значение
Удалить пары ключ-значение из хэша можно с помощью методов
clear
delete
delete_if
reject
reject!
shift
Метод
clear
Метод
shift
nil
a = {1=>2, 3=>4}
b = a.shift # [1,2]
# а равно {3=>4}
Метод
delete
a = (1=>1, 2=>4, 3=>9, 4=>16)
a.delete(3) # 9
# a is now {1=>1, 2 =>4, 4=>16)
a.delete(5) # в этом случае nil.
delete(6) { "не найдено" } # "не найдено".
Пользуйтесь методами
delete_if
reject
reject!
true
reject
reject!
nil
8.2.5. Обход хэша
В классе
Hash
each
each_key
each_pair
each_value
each_pair
each
{"а"=>3, "b"=>2}.each do |key, val|
print val, " из ", key, "; " # 3 из a; 2 из b;