我有一个带有以下键/值对的哈希
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?
解决方法
你可以这样做:
my %hash = (4 => "model1",2 => "model2"); my $str = join(",",map { "$_ X $hash{$_}" } keys %hash); print $str;
输出:
4 X model1,2 X model2
这个怎么运作:
map {expr} list为列表中的每个项目计算expr,并返回包含这些评估的所有结果的列表.这里,为散列的每个键计算“$_ X $hash {$_}”,因此结果是键X值字符串的列表.连接负责将逗号放在每个字符串之间.
请注意,如果您存储(项目,数量)对,则您的哈希值有点不寻常.它通常是相反的方式:
my %hash = ("model1" => 4,"model2" => 2); my $str = join(",map { "$hash{$_} X $_" } keys %hash);
因为使用您的方案,您不能在哈希中为两个不同的项目存储相同的数量.