Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
endОстальные два итератора передают в блок только ключ или только значение:
{"а"=>3,"b"=>2}.each_key do |key| print "ключ = #{key};" # Печатается: ключ = a; key = b;end{"a"=>3,"b"=>2).each_value do |value| print "значение = #{value};" # Печатается: значение = 3; val = 2;end8.2.6. Инвертирование хэша
Инвертирование хэша осуществляется в Ruby тривиально с помощью метода
invertа = {"fred"=>"555-1122","jane"=>"555-7779"}b = a.invertb["555-7779"] # "jane"Поскольку ключи в хэше уникальны, такая операция может привести к потере данных. Значения-дубликаты будут преобразованы в уникальный ключ, которому соответствует какое-то одно из множества прежних значений. Предсказать, какое именно, невозможно.
8.2.7. Поиск ключей и значений в хэше
Определить, было ли присвоено значение некоторому ключу, позволяет метод
has_key?include?key?member?а = {"а"=>1,"b"=>2}a.has_key? "с" # falsea.include? "а" # truea.key? 2 # falsea.member? "b" # trueМожно также воспользоваться методом
empty?lengthsizea.empty? # falsea.length # 2Можно проверить также, существует ли указанное значение. Для этого предназначены методы
has_value?value?a.has_value? 2 # truea.value? 99 # false8.2.8. Копирование хэша в массив
Чтобы преобразовать весь хэш в массив, пользуйтесь методом
to_ah = {"а"=>1,"b"=>2}h.to_a # ["а",1,"b",2]Можно также получить массив, содержащий только ключи или только значения:
h.keys # ["а","b"]h.values # [1,2]Наконец, можно поместить в массив только значения, соответствующие заданному списку ключей. Этот метод работает для хэшей примерно так же, как одноименный метод для массивов. (Кроме того, как и в случае массивов, метод
values_atindicesindexesh = {1=>"one", 2=>"two", 3=>"three", 4=>"four", "cinco"=>"five"}h.values_at(3,"cinco",4) # ["three","five","four"]h.values_at(1,3) # ["one","three"]8.2.9. Выборка пар ключ-значение по заданному критерию
К классу
HashEnumerabledetectfindselectfind_allgrepminmaxrejectМетод
detectfindtruenames = {"fred"=>"jones","jane"=>"tucker", "joe"=>"tucker","mary"=>"SMITH"}# Найти tucker.names.detect {|k,v| v=="tucker" } # ["joe","tucker"]# Найти имена, записанные прописными буквами.names.find {|k,v| v==v.upcase } # ["mary", "SMITH"]Разумеется, объекты в хэше могут быть сколь угодно сложными, как и условие, проверяемое в блоке, но сравнение объектов разных типов может оказаться проблематичным.
Метод
selectfind_allnames.select {|k,v| v=="tucker" }# [["joe", "tucker"], ["jane", "tucker"]]names.find_all (|k,v| k.count("r")>0}# [["mary", "SMITH"], ["fred", "jones"]]8.2.10. Сортировка хэша
Хэши по природе своей не упорядочены ни по ключам, ни по значениям. Чтобы отсортировать хэш, Ruby преобразует его в массив, который затем сортирует. Понятно, что и результатом является массив.
names = {"Jack"=>"Ruby","Monty"=>"Python",
