在perl中加入键和值

时间:2011-12-07 08:51:41

标签: perl

我有一个带有以下键/值对的哈希

4 => model1
2 => model2 

我想要从上面的哈希

创建以下字符串
4 X model1 , 2 X model2

我尝试了以下

my %hash,
foreach my $keys (keys %hash) {
    my $string = $string . join(' X ',$keys,$hash{$keys});
}
print $string;

我得到的是

4 X model12Xmodel2

如何完成所需的结果4 X model1 , 2 X model2

2 个答案:

答案 0 :(得分:16)

你可以这样做:

my %hash = (4 => "model1", 2 => "model2");
my $str = join(", ", map { "$_ X $hash{$_}" } keys %hash);
print $str;

输出:

4 X model1, 2 X model2

工作原理:

map { expr } listexpr中的每个项目评估list,并返回包含这些评估的所有结果的列表。这里,针对散列的每个键评估"$_ X $hash{$_}",因此结果是key X value个字符串的列表。 join负责将逗号放在每个字符串之间。


请注意,如果您要存储(项目,数量)对,则您的哈希值有点不寻常。它通常是相反的方式:

my %hash = ("model1" => 4, "model2" => 2);
my $str = join(", ", map { "$hash{$_} X $_" } keys %hash);

因为使用您的方案,您无法为哈希中的两个不同项目存储相同的数量。

答案 1 :(得分:1)

您还可以按如下方式修改循环:

my @tokens =();
foreach my $key (keys %hash) {
     push @tokens, $string . join(' X ',$key, $hash{$key});
}
print join(', ' , @tokens);