Skip to content

krasdevmeetup/hash-schema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Hash-map schema

Задача:

Дан исходный хеш, примерно в таком виде:

input = {
  :aaa => "22",
  :aaaa => "New 22",
  :bbb => "434",
  :ccc => {:ddd   => "abc",
           :ddddd => "Not needed",
           :ggg   => "Needed",
           :hard_to_believe => []},
  :zzz => [
    {:hhh  => 126,
     :hhhh => "Don't need",
     :kkk  => "Existing key"},
    {:hhh  => "DoobyDo",
     :kkk  => "Needed",
     :mmm  => "Existing key"}
  ]
}

Приведен в виде ruby hash, но мне кажется всем понятно что это такое. Ключи хеша могут быть и в виде строк, не суть важно. Важно, что хеш может быть многоуровневым. Ключи данного уровня помещены в массивы.

Далее, имеем некий шаблон, или другими словами схему:

# Test schema
schema = [
          :aaa,
          :bbb,
          :ooo,
          {:ccc => [:ddd, :ggg]},
          {:zzz => [[:hhh, :kkk, :mmm]]},
         ]

Здесь мы в виде массива ключей указываем, как будет выглядеть результирующий хеш после применения схемы к исходному ключу. В данном случае ключ :ccc содержит массив других ключей [:ddd, :ggg]. Ключ :zzz содержит массив объектов, каждый из которых тоже является ключем хеша.

В данном случае после применения схемы к исходному хешу мы получим на выходе следующий хеш:

output = {
  :aaa => "22",
  :bbb => "434",
  :ooo => nil,
  :ccc => {:ddd => "abc", :ggg => "Needed"},
  :zzz => [{:hhh => 126, :kkk => "Existing key", :mmm => nil},
           {:hhh=>"DoobyDo", :kkk=>"Needed", :mmm=>"Existing key"}]
}

То есть схема описывает, данные каких ключей необходимо сохранить в результирующем хеше. В случае, если во входных данных отсутствует значение данного ключа значением назначается nil (null).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published