我有一个带有以下键/值对的哈希
4 => model1
2 => model2
Run Code Online (Sandbox Code Playgroud)
我想要从上面的哈希创建以下字符串
4 X model1 , 2 X model2
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容
my %hash,
foreach my $keys (keys %hash) {
my $string = $string . join(' X ',$keys,$hash{$keys});
}
print $string;
Run Code Online (Sandbox Code Playgroud)
我得到的是
4 X model12Xmodel2
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到预期的效果4 X model1 , 2 X model2?
Mat*_*Mat 16
你可以这样做:
my %hash = (4 => "model1", 2 => "model2");
my $str = join(", ", map { "$_ X $hash{$_}" } keys %hash);
print $str;
Run Code Online (Sandbox Code Playgroud)
输出:
4 X model1, 2 X model2
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
map { expr } list评估其中expr的每个项目list,并返回包含这些评估的所有结果的列表.这里,"$_ X $hash{$_}"针对散列的每个键进行评估,因此结果是key X value字符串列表.在join需要把逗号在每个字符串之间的关怀.
请注意,如果您存储(项目,数量)对,则您的哈希值有点不寻常.它通常是相反的方式:
my %hash = ("model1" => 4, "model2" => 2);
my $str = join(", ", map { "$hash{$_} X $_" } keys %hash);
Run Code Online (Sandbox Code Playgroud)
因为使用您的方案,您不能在哈希中为两个不同的项目存储相同的数量.