我有这个代码
#!/usr/bin/perl
use strict;
my @a = ("b","a","d","c");
my %h = ("a",1,"b",2,"c",3,"d",4);
#print '"' . join('","', @a), "\"\n";
print "\n";
foreach my $key (@a) {
print '"' . $h{$key} . '",';
}
print "\n";
Run Code Online (Sandbox Code Playgroud)
那个输出
"2","1","4","3",
Run Code Online (Sandbox Code Playgroud)
但我想它只是输出
"2","1","4","3"
Run Code Online (Sandbox Code Playgroud)
请注意,最后','不在那里.
是否有可能以特定的顺序打印哈希,或者其他一些技巧来获得我想要的输出?
更新:
根据friedo的回答,我能够做到对了.
print '"' . join('","', @h{@a}), "\"\n";
Run Code Online (Sandbox Code Playgroud)
弗里多的答案没有关于价值观的引用.
Gre*_*con 10
print join("," => map qq["$_"], @h{@a}), "\n";
Run Code Online (Sandbox Code Playgroud)
这一行的核心是@h{@a}一个散列片,意思是相同的
($h{"b"}, $h{"a"}, $h{"d"}, $h{"c"})
Run Code Online (Sandbox Code Playgroud)
明显的优势是表达的经济性.
移出一个级别,我们找到map运算符:对于每个值@h{@a},使用双引号将其包装qq["$_"].因为您希望结果中有双引号,所以代码用于qq//切换分隔符.否则,你会"\"$_\""遇到问题中的问题或串联链.
最后,join在映射值之间插入逗号.在这种情况下,=>与逗号运算符相同,但我在这里使用它而不是
join(",", ...)
Run Code Online (Sandbox Code Playgroud)
由于逗号被挤在一起,我觉得这看起来很不愉快.
你可能很想写join没有括号,但这样做会"\n"引起争论join而不是print.
您可以使用哈希切片来获取值,然后使用join逗号将它们粘在一起.
print join ",", @h{@a};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |