比较Perl中哈希内的字符串值

时间:2014-07-09 12:24:17

标签: perl

我想按字母顺序对此哈希进行排序。这是我的哈希结构

my $hash = {
          'names' => [
            {
              'state' => 'I',
              'names' => 'INTTEST',
            },
            {
              'state' => 'I',
              'names' => 'TEST',
            },
            {
              'state' => 'D',
              'names' => 'GREATTEST',
            },
            {
              'state' => 'I',
              'names' => 'Stest',
            },
            {
              'state' => 'I',
              'names' => 'Atest',
            },
            {
              'state' => 'D',
              'names' => 'SPtest',
            },
            ]
        };

我试过的是

my @sorted_data = (sort { lc($b->{names}) cmp lc($a->{names});} $hash->{names});

我想将相同的结构返回给用户。

1 个答案:

答案 0 :(得分:2)

您必须取消引用$hash->{names}数组,

use feature 'fc';
my @sorted_data = sort{ fc($b->{names}) cmp fc($a->{names}) } @{$hash->{names}};

fc检查两个字符串是否相等,无论大小写

如果要进行排序,只需将结果分配回原始数组,

@{$hash->{names}} = sort{ fc($b->{names}) cmp fc($a->{names}) } @{$hash->{names}};