Никола обнови решението на 19.10.2016 15:04 (преди около 8 години)
+module FetchDeep
+ def fetch_deep(keys)
+ keys.split('.').reduce(self) do |m, key|
+ m[key.to_i] || m[key] || m[key.to_sym]
Тука гледам първо to_i
, иначе се чупи при масив, а така lazy || ме спасява, малко е хаково, отворен съм към идеи.
+ end
+ end
+end
+
+class Hash
+ include FetchDeep
+
+ def reshape(shape)
+ {}.tap do |h|
+ shape.each do |key, val|
+ h[key] = val.is_a?(Hash) ? reshape(val) : fetch_deep(val)
+ end
+ end
+ end
+end
+
+class Array
+ include FetchDeep
+
+ def reshape(shape)
+ [].tap do |arr|
+ each do |input|
+ arr << input.reshape(shape)
+ end
+ end
+ end
+end
Тука гледам първо
to_i
, иначе се чупи при масив, а така lazy || ме спасява, малко е хаково, отворен съм към идеи.Имплементацията за
fetch_deep
може да не е същата за Array и Hash :)