У меня есть этот хэш:Как удалить частичные файлы в массиве массивов?
{"path_1" => [1,2,3], "path_2" => [1,4,5], "path_3" => [1,2,3,4]}
Я хочу, чтобы удалить все «частичный» путь из хэша. Так что path_1
нужно будет уйти, потому что это часть path_3
; [1,2,3]
является «незавершенным» массивом [1,2,3,4]
. Все «частичные» должны быть удалены из этого хэша.
Вот мой текущий код, который работает, но это медленно, когда речь идет о больших хэшей:
# hash sorted by length of value
hash_array = {"path_1" => [1,2,3], "path_2" => [1,4,5], "path_3" => [1,2,3,4]}
# make a separate copy of the hash
cloned_hash_array = hash_array.clone
hash_array.each {|path_index, path|
# delete this path from the cloned hash so it doesn't match itself
cloned_hash_array.delete(path_index)
cloned_hash_array.each{|cloned_path_index, cloned_path|
if cloned_path[0,path.length] == path.clone
hash_array.delete(path_index)
end
}
}
Это просто соглашение, но обычно многострочные блоки используют 'сделать ... end' вместо' {...} 'как вы делаете с вашими «каждым». –
Согласитесь, многострочные '{...}' блоки выглядят странно :-) –
Имеет ли значение вопрос в этих массивах, или они более подходящие Set? Если они являются наборами, вы можете использовать Set # proper_subset – DGM