Я хотел поделиться с вами, ребята, функцией, которую я создал, чтобы увидеть, как я мог ее оптимизировать, или если бы был лучший способ сделать это.Как вы сглаживаете хэш ключей, пар значений?
sub flatten{
my($ref,$delim,$item_delim,$array,$str) = @_;
die("Required Hash Reference") unless isHash($ref);
$delim = $delim ? $delim :'_';
#dump into array hash vals #simplified
if(!$item_delim){
@{$array} = %{$ref};
}else{
my($keys,$values);
$keys = getKeys($ref);
$values = getValues($ref);
#item strings
if($#$keys > 0 && $#$values > 0){
#fix for issue where value[n] is empty
@{$array}= map{ (defined $$values[ $_ ]) ? $$keys[ $_ ].$item_delim.$$values[ $_ ] : $$keys[ $_ ].$item_delim } 0 .. int($#$keys);
}else{
log "No Values to flatten";
return '';
}
}
$str = join($delim,@{$array});
return $str;
}
Есть ли какие-либо пункты оптимизации, о которых я должен знать здесь?
В основном я хочу, чтобы перейти от
$HASH => {
key1 => 'val1',
key2 => 'val2',
key3 => 'val3',
}
в $STRING= key1=val1&key2=val2 ...
Обновлено
раствор без модулей является предпочтительным, я просто хочу знать, как эффективно придавить хэш !.
Обратите внимание, что некоторые из функций здесь - это просто функции-обертки, которые выполняют то, что они говорят. isHash getKeys ... не обращайте на них внимания!
Почему вы используете функцию типа 'isHash',' getKeys', 'getValues'? Является ли эта часть стандартом компании? И не можете ли вы использовать простые массивы и хеши вместо ссылок? – Borodin