首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对perl 5.30中的多级哈希(嵌套哈希)进行排序

无法对perl 5.30中的多级哈希(嵌套哈希)进行排序
EN

Stack Overflow用户
提问于 2022-03-17 13:37:45
回答 1查看 114关注 0票数 0

作为从perl 5.8迁移到perl 5.30的一部分,无法以排序的方式获得perl嵌套散列。尝试禁用5.30中的散列随机化特性(set PERL_PERTURB_KEYS=0 set PERL_HASH_SEED=0x00),但排序仍然不适用于多级/nested哈希。

除了对perl代码中的foreach键进行排序外,还有其他方法,比如禁用任何环境变量/配置,以便以排序方式将值wrt获得到perl 5.30。也尝试使用废弃的深度:散列::Util(嵌套哈希排序为perl5.6),但没有使用wrt到嵌套/多层哈希。

例句:不工作:

代码语言:javascript
复制
$VAR3 = 'Mapping_1';
$VAR4 = {
'2' => {
        'ShortName' => 'Mapping_Tx2',
        'FileName' => 'Appl_1.arxml',
       
      },
'1' => {
        'ShortName' => 'Mapping_Tx1',
        'FileName' => 'Appl_1.arxml',
        
      }
};

工作:

代码语言:javascript
复制
$VAR3 = 'Mapping_1';
$VAR4 = {
    '1' => {
        'ShortName' => 'Mapping_Tx1',
        'FileName' => 'Appl_1.arxml',
        
      },
'2' => {
        'ShortName' => 'Mapping_Tx2',
        'FileName' => 'Appl_1.arxml',
       
      }

};
EN

回答 1

Stack Overflow用户

发布于 2022-03-17 14:18:29

Perl的散列没有排序,也没有排序。如果您的代码依赖于Perl 5.8中的特定命令,那么它可能是错误的,而且只是偶然地工作。

你有两个合理的选择。

  1. 您可以停止试图使数据结构本身保持特定的顺序,而是在使用该数据结构时选择一个订单。例如,要以稳定的顺序迭代所有散列键,可以使用for (sort keys %hash)而不是for (keys %hash)。这几乎总是正确的approach.

  1. 使用不同的数据结构来维护顺序。如果您需要稳定的排序,但不需要快速键→值访问,请考虑一个数组。否则,请考虑创建一个实现所需数据结构的类,可能会在内部使用散列和数组来存储订单。选择哪种方法取决于所需的特定顺序。例如,Hash::Ordered维护插入顺序.
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71513273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档