【问题标题】:Print hash keys sequentially in Perl在 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) 的错误,但很久以前就已修复。

标签: perl hash


【解决方案1】:

keys() 的文档是这样说的:

哈希条目以明显随机的顺序返回。

因此,如果您想按特定顺序提取数据,则应指定该顺序。

for $content (@data){
    for $fields (qw(id name mail)) {
        print $content->{$fields}.",";
    }
    print "\n";
}

或者使用哈希切片来简化代码:

for $content (@data) {
  print join(',', @{$content}{qw(id name mail)}), "\n";
}

【讨论】:

猜你喜欢
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2017-09-30
  • 2016-12-18
相关资源
最近更新 更多