У меня сложная структура данных, которая выглядит следующим образом:
ds1 =
{
'item1' =>
{
'value' => '1024',
'flavor' => %w(s m l xl),
'platform_version' => %w(7),
},
'item2' =>
[{
'value' => '2000000',
'flavor' => %w(l xl),
'platform_version' => %w(7),
},
{
'value' => '1000000',
'flavor' => %w(s m),
'platform_version' => %w(6),
},],
}
В настоящее время я зацикливаюсь на этом следующим образом:
ds1.each do |name, obj|
if obj.is_a?(Array)
# Found that the data structure has multiple scenarios for the same key and need to loop over each element
obj.each do |sub_obj|
next unless flavor_check?(sub_obj, s_lit, 'flavor') # calls flavor_check? function
obj_func(name, sub_obj) # call a function here
end
else
# hash only has one element so treat normally, no need for another loop
next unless flavor_check?(sub_obj, s_lit, 'flavor') # calls flavor_check? function
obj_func(name, sub_obj) # call a function here
end
end
Иногда у меня гораздо больше кода, который янеобходимо выполнить и повторить его дважды, в зависимости от того, является ли "obj" массивом или нет, просто делает мой код занятым / уродливым.Есть ли более элегантный способ справиться с этим?