使用 YAML::XS 控制 hashref 的顺序
Posted
技术标签:
【中文标题】使用 YAML::XS 控制 hashref 的顺序【英文标题】:Control order of hashref with YAML::XS 【发布时间】:2015-01-26 20:41:34 【问题描述】:我正在使用 YAML::XS
库将数据结构转储到 YAML:
foo =>
bar => [
...,
...,
],
baz => [
...,
...,
],
...
YAML::XS 的默认行为似乎是在转储密钥之前对其进行排序,但这不是我想要的。人类必须阅读和编辑这个脚本的输出,所以可读性是一个问题。有没有办法控制转储密钥的顺序,以便 foo->baz
出现在 foo->bar
之前?
【问题讨论】:
文档是here 您可以使用 YAML.pm 的Bless
来执行此操作,但不确定是否可以使用 YAML::XS。
@ikegami 我已经读过了,它没有回答我的问题
@Floegipoky,确实如此。
@ThisSuitIsBlackNot 我最终将YAML::XS
换成了YAML
,非常感谢您指出Bless
功能。它比我想用的更强大,但它完成了工作。对于未来的查看者,请注意,除非您在写入时确切知道您期望哪些键,否则您必须检查您正在 Bless
ing 的每个节点。另请注意,如果密钥不存在,它将生成一个虚拟条目,因此请确保首先检查是否存在:my $blessarray = []; push $blessarray, 'optionalkey' if $table->optionalkey;
。
【参考方案1】:
从docs 中可以看出,没有配置哈希顺序的选项。通过查看LibYAML/perl_libyaml.c
中的dump_node
和dump_hash
进一步证实了这一点。
【讨论】:
以上是关于使用 YAML::XS 控制 hashref 的顺序的主要内容,如果未能解决你的问题,请参考以下文章
Perl fetchrow_hashref 结果是不同的整数与字符串值