/ / Perlのハッシュの中の文字列値を比較する - perl

Perl - 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は2

あなたは参照を外す必要があります $hash->{names} アレイ、

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

fc 2つの文字列が大文字と小文字の区別なし

定位置でソートしたい場合は、結果を元の配列に戻すだけです。

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