在 Perl 中按顺序打印哈希键
Posted
技术标签:
【中文标题】在 Perl 中按顺序打印哈希键【英文标题】:Print hash keys sequentially in Perl 【发布时间】:2022-01-19 16:41:36 【问题描述】:我有哈希数组,需要迭代并打印序列中的值 - id,name,mailid
。
但是当我打印键的内容时,它一直在洗牌。如何打印如下内容:
ID,NAME,EMAIL
vkk,Victor,vkk@test.com
smt,Smith,smt@test.com
这是我的脚本:
my @data = (
'mail' => 'vkk@test.com',
'name' => 'Victor',
'id' => 'vkk'
,
'name' => 'Smith',
'mail' => 'smt@test.com',
'id' => 'smt'
);
print "ID,NAME,EMAIL\n"; #header
for $content (@data)
for $fields (keys %$content)
print $content->$fields.",";
print "\n";
【问题讨论】:
for $fields qw(id name mail)
?如果您知道所需的键顺序,那么您可以指定它。
@SilvioMayolo:谢谢,那行得通。但是打印逗号,
时出现问题。
我在循环中添加了条件 - print "," if($fields ne 'mail');
解决此问题的一种方法是不使用哈希。如果您只有 3 个字段,则最好使用数组作为值。
@Silvio Mayolo 那应该是for $fields (qw(id name mail))
。曾经允许for $fields qw(id name mail)
的错误,但很久以前就已修复。
【参考方案1】:
keys()
的文档是这样说的:
哈希条目以明显随机的顺序返回。
因此,如果您想按特定顺序提取数据,则应指定该顺序。
for $content (@data)
for $fields (qw(id name mail))
print $content->$fields.",";
print "\n";
或者使用哈希切片来简化代码:
for $content (@data)
print join(',', @$contentqw(id name mail)), "\n";
【讨论】:
@$contentqw(id name mail)
也可以写成$content->@qw(id name mail)
^--- 仅在版本 5.20 之后。 perldoc.perl.org/perlref#Postfix-Dereference-Syntax以上是关于在 Perl 中按顺序打印哈希键的主要内容,如果未能解决你的问题,请参考以下文章