0

だから私はこのようなハッシュテーブルを持っています:

M => 1
S => 50

私はこのようなことをしたい:

$var = map { "$hash{$_}"."$_\n" } keys %hash;
print $var;

印刷する変数は次のようになります。

1M50S

残念ながら、マップステートメントは機能しません:(そして、はい、ifステートメントにあり、条件に応じて変化するため、変数に割り当てる必要があります。これを行うためのきれいな方法はありますか?

4

4 に答える 4

4

逆を使用するだけです:

my %hash = (M => 1, S => 50);
my $var = reverse %hash;
## use the next line instead if you need sorting
#my $var = join '', map { $_ . $hash{ $_ } } reverse sort keys %hash;
## or this
#my $var = reverse map { $_ => $hash{ $_ } } reverse sort keys %hash;
print $var; ## outputs 1M50S
于 2012-05-18T19:37:40.480 に答える
1

たとえば、最初に値 + キーを連結してから、結合を行うことができます。

%hash = (M => 1, S => 50);
$var = join("", map {$hash{$_} . $_}  keys %hash);
print $var . "\n" ;

追加:数値であると仮定して、値で並べ替えたい場合:

%hash = (M => 1, S => 50, Z => 6);
$var = join("", map {$hash{$_} . $_}  sort { $hash{$a} <=> $hash{$b} } keys %hash);
print $var . "\n" ;

1M6Z50S
于 2012-05-18T19:29:18.067 に答える
1

keys %hashつまり、その順序が必要な場合とそうでない場合があります。

ここでは順序付きリストを使用してキーを指定することをお勧めします。

そして汚れた道があります

%time=(M=>1,S=>50);
$var=join"",map{"$time{$_}$_"}('M','S');
#=> $var='1M50S'
于 2012-05-18T19:31:51.653 に答える
0

MIDNSHP=Xすべてのキーが必要な順序になっている場合は、次のように記述します

my $var = join '', map "$hash{$_}$_", split //, 'MIDNSHP=X';

ハッシュに含まれるキーのセットが完全ではない可能性がある場合は、代わりにこれを使用してください

my $var = join '', map "$hash{$_}$_", grep $hash{$_}, split //, 'MIDNSHP=X';
于 2012-05-18T20:36:05.973 に答える