Perl 访问;成对散列“;用于柱规范的参考文献
我正在建立一个小型库,将日志数据转换为类似CSV的文件,可以通过电子表格软件导入。对于输出,我感兴趣的是一个选项,如果需要,可以为表列显示人性化的标题。这应该是一个选项,以便该工具也可以用最少的努力来使用。我提出了一个列规范数组,其中包含键的普通标量或具有一对键和值的散列引用。我通过键和值访问这些,这对我来说有点奇怪 是否有一种更简单的方法来访问仅包含一对的散列的密钥和值? (我尽量简化代码。) 使用Perl 访问;成对散列“;用于柱规范的参考文献,perl,hash,conventions,Perl,Hash,Conventions,我正在建立一个小型库,将日志数据转换为类似CSV的文件,可以通过电子表格软件导入。对于输出,我感兴趣的是一个选项,如果需要,可以为表列显示人性化的标题。这应该是一个选项,以便该工具也可以用最少的努力来使用。我提出了一个列规范数组,其中包含键的普通标量或具有一对键和值的散列引用。我通过键和值访问这些,这对我来说有点奇怪 是否有一种更简单的方法来访问仅包含一对的散列的密钥和值? (我尽量简化代码。) 使用每个 发件人: 在列表上下文中对哈希调用时,返回一个2元素列表 由哈希的下一个元素的键和值组成
每个
发件人:
在列表上下文中对哈希调用时,返回一个2元素列表
由哈希的下一个元素的键和值组成
但是不要忘记使用键(%hash)
重置迭代器,之后或后续的每个
都将失败
my ($k, $v) = each(%$_);
keys(%$_);
使用每个
发件人:
在列表上下文中对哈希调用时,返回一个2元素列表
由哈希的下一个元素的键和值组成
但是不要忘记使用键(%hash)
重置迭代器,之后或后续的每个
都将失败
my ($k, $v) = each(%$_);
keys(%$_);
您所需要的一切:
my ($k, $v) = %hash;
所以
或
您所需要的一切:
my ($k, $v) = %hash;
所以
或
键和值有什么问题?你的代码已经很简单了。@ThisSuitesBlack不是…我想的那样,但是因为打开了一个列表上下文,我发现由于参数的预期单例字符,这是误导性的。没有什么误导性的,你可以推单标量和多标量:push@foo,$bar
。我认为您考虑得太多了。@ThisSuitesBlack不是因为可读性和最小的混乱(“自我文档”),这就是为什么我更喜欢在打印表的调用端使用小哈希而不是两个元素数组的原因。也许我的上一条评论本身有点混乱,我认为是复数形式的键和值有误导性。键和值有什么问题?你的代码已经很简单了。@ThisSuitesBlack不是…我想的那样,但是因为打开了一个列表上下文,我发现由于参数的预期单例字符,这是误导性的。没有什么误导性的,你可以推单标量和多标量:push@foo,$bar
。我认为您考虑得太多了。@ThisSuitesBlack不是因为可读性和最小的混乱(“自我文档”),这就是为什么我更喜欢在打印表的调用端使用小哈希而不是两个元素数组的原因。也许我的上一条评论本身有点让人困惑,我认为是复数形式的键和值有误导性。@Wolf,没有。回答时添加了警告。@Wolf,没有。回答时添加了警告。太好了,你带来了这个版本(my($k,$v)=%hash;
)。与此同时,我自己也发现了这一点。看起来很简单。它还教给我们关于List.BTW的一个教训:你会考虑这些“配对哈希”正常或他们通常表示坏的解决方案…你能为这种替代品提出一个更为惯用的解决方案吗?这是不寻常的,但也不一定是坏的。数组(例如,[x=>'u']
)将更方便(push@keys,$\u->[0];
)。如果调用者必须打印表格(x=>'u',y=>'y')
,这真的有那么糟糕吗?啊,我明白了,但需要习惯:=>
不局限于散列:-)非常感谢。很好,你带来了这个版本(my($k,$v)=%hash;
)。与此同时,我自己也发现了这一点。看起来很简单。它还教给我们关于List.BTW的一个教训:你会考虑这些“配对哈希”正常或他们通常表示坏的解决方案…你能为这种替代品提出一个更为惯用的解决方案吗?这是不寻常的,但也不一定是坏的。数组(例如,[x=>'u']
)将更方便(push@keys,$\u->[0];
)。如果调用方必须打印表格(x=>'u',y=>'y')
,这真的有那么糟糕吗?啊,我明白了,但需要习惯:=>
不限于散列:-)非常感谢。
push @keys, ( %$_ )[0];
push @captions, ( %$_ )[1];