私はそれを最適化する方法やこれを行う良い方法があるかどうかを知るために作成した関数を皆さんと共有したいと思っていました。キーと値のペアのハッシュをどのように平坦化しますか?
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;
}
ここで注意する必要がある最適化点はありますか?
は基本的に私は
モジュールなしのソリューションは、私が実際には効果的にハッシュを平坦にする方法を知りたいことが好ましいを更新し$STRING= key1=val1&key2=val2 ...
に
$HASH => {
key1 => 'val1',
key2 => 'val2',
key3 => 'val3',
}
から行ってみたいです!
ここでの関数の中には、単純に彼らが言うことを行うラッパー関数であることに注意してください。 isHash getKeys ...それらには注意を払わないでください!
なぜisHash'、 'getKeys'、' getValues'のような関数を使用していますか?これは企業標準の一部ですか?また、参照の代わりに単純な配列やハッシュを使用することはできませんか? – Borodin